Uniquable RdrName instance

Simon Peyton Jones simonpj at microsoft.com
Tue Jun 17 19:53:47 UTC 2014


I would require a lot of convincing that we wanted Uniques for RdrNames.  I seriously doubt that, once the dust has settled, you'll need a finite map indexed by RdrNames.  But even if you do, you could use a TrieMap-like structure.

Simon

| -----Original Message-----
| From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of Richard
| Eisenberg
| Sent: 17 June 2014 15:01
| To: Jan Stolarek
| Cc: ghc-devs at haskell.org
| Subject: Re: Uniquable RdrName instance
| 
| So, without really trying to understand the code, what you are saying is
| this: you want a finite map from RdrNames. That seems sensible enough, if
| the domain elements all appear in the same scope in the Haskell source. I
| don't have enough perspective to say whether a Uniquable instance is the
| way to get to a finite map here.
| 
| Richard
| 
| On Jun 16, 2014, at 3:33 PM, Jan Stolarek <jan.stolarek at p.lodz.pl> wrote:
| 
| >> 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
| 
| _______________________________________________
| ghc-devs mailing list
| ghc-devs at haskell.org
| http://www.haskell.org/mailman/listinfo/ghc-devs


More information about the ghc-devs mailing list