
On 17/06/14 20:53, Simon Peyton Jones wrote:
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.
I must be missing something... but what's wrong with Map RdrName? Cheers, Simon
Simon
| -----Original Message----- | From: ghc-devs [mailto:ghc-devs-bounces@haskell.org] On Behalf Of Richard | Eisenberg | Sent: 17 June 2014 15:01 | To: Jan Stolarek | Cc: ghc-devs@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
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@haskell.org | http://www.haskell.org/mailman/listinfo/ghc-devs _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs