Uniquable RdrName instance
Jan Stolarek
jan.stolarek at p.lodz.pl
Mon Jun 16 19:33:06 UTC 2014
> Why do you want this? The danger I see lurking is that you might find two
> RdrNames that give the same answer to getUnique but represent different
Yes, that's exactly my concern.
> Why do you want this?
I'm working on #7282 - RebindableSyntax and Arrows. Here's a snippet from desugaring of arrow
notation:
leaves = concatMap leavesMatch matches
where
leavesMatch :: LMatch Id (Located (body Id)) -> [(Located (body Id), IdSet)]
leavesMatch (L _ (Match pats _ (GRHSs grhss binds)))
= let defined_vars = mkVarSet (collectPatsBinders pats) `unionVarSet`
mkVarSet (collectLocalBinders binds)
in [(body, mkVarSet (collectLStmtsBinders stmts) `unionVarSet` defined_vars) | L _
(GRHS stmts body) <- grhss]
This is in the desugarer. But I need to also know `length leaves` at the renaming stage, which
means I need to call `concatMap leavesMatch matches`. The problem is that in the renamer my
datatypes are not parametrised by `Id`. I turned `Id` into a type parameter `id`, but then I
can't use VarSets. I could use more general UniqueSets but only if `id` type parameter is an
instance of Uniquable. And since in the renamer the datatypes are parametrized with RdrName this
leads me to wanting Uniqable RdrName instance.
Janek
More information about the ghc-devs
mailing list