@@ -3316,53 +3316,59 @@ keySetNameMap nmap = freeVarsE $ ListE $ keysNameMap nmap
3316
3316
instance SinkableE (NameMap c a ) where
3317
3317
sinkingProofE = undefined
3318
3318
3319
- newtype NameMapE (c :: C ) (e :: E ) (n :: S ) = NameMapE ( NameMap c (e n ) n )
3319
+ newtype NameMapE (c :: C ) (e :: E ) (n :: S ) = UnsafeNameMapE ( RawNameMap (e n ))
3320
3320
deriving (Eq , Semigroup , Monoid , Store )
3321
3321
3322
3322
-- Filters out the entry(ies) for the binder being hoisted above,
3323
3323
-- and hoists the values of the remaining entries.
3324
3324
hoistNameMapE :: (BindsNames b , HoistableE e , ShowE e )
3325
3325
=> b n l -> NameMapE c e l -> HoistExcept (NameMapE c e n )
3326
- hoistNameMapE b (NameMapE nmap) =
3327
- NameMapE <$> (traverseNameMap (hoist b) $ hoistFilterNameMap b nmap) where
3326
+ hoistNameMapE b (UnsafeNameMapE raw) =
3327
+ UnsafeNameMapE <$> traverse (hoist b) diff
3328
+ where
3329
+ diff = raw `R.difference` frag
3330
+ UnsafeMakeScopeFrag frag = toScopeFrag b
3328
3331
{-# INLINE hoistNameMapE #-}
3329
3332
3330
3333
insertNameMapE :: Name c n -> e n -> NameMapE c e n -> NameMapE c e n
3331
- insertNameMapE n x (NameMapE nmap) = NameMapE $ insertNameMap n x nmap
3334
+ insertNameMapE (UnsafeMakeName n) x (UnsafeNameMapE raw)
3335
+ = UnsafeNameMapE $ R. insert n x raw
3332
3336
{-# INLINE insertNameMapE #-}
3333
3337
3334
3338
lookupNameMapE :: Name c n -> NameMapE c e n -> Maybe (e n )
3335
- lookupNameMapE n ( NameMapE nmap ) = lookupNameMap n nmap
3339
+ lookupNameMapE ( UnsafeMakeName n) ( UnsafeNameMapE raw ) = R. lookup n raw
3336
3340
{-# INLINE lookupNameMapE #-}
3337
3341
3338
3342
singletonNameMapE :: Name c n -> e n -> NameMapE c e n
3339
- singletonNameMapE n x = NameMapE $ singletonNameMap n x
3343
+ singletonNameMapE ( UnsafeMakeName n) x = UnsafeNameMapE $ R. singleton n x
3340
3344
{-# INLINE singletonNameMapE #-}
3341
3345
3342
3346
toListNameMapE :: NameMapE c e n -> [(Name c n , (e n ))]
3343
- toListNameMapE (NameMapE nmap) = toListNameMap nmap
3347
+ toListNameMapE (UnsafeNameMapE raw) =
3348
+ R. toList raw <&> \ (r, x) -> (UnsafeMakeName r, x)
3344
3349
{-# INLINE toListNameMapE #-}
3345
3350
3346
3351
unionWithNameMapE :: (e n -> e n -> e n ) -> NameMapE c e n -> NameMapE c e n -> NameMapE c e n
3347
- unionWithNameMapE f (NameMapE nmap1 ) (NameMapE nmap2 ) =
3348
- NameMapE $ unionWithNameMap f nmap1 nmap2
3352
+ unionWithNameMapE f (UnsafeNameMapE raw1 ) (UnsafeNameMapE raw2 ) =
3353
+ UnsafeNameMapE $ R. unionWith f raw1 raw2
3349
3354
{-# INLINE unionWithNameMapE #-}
3350
3355
3351
3356
traverseNameMapE :: (Applicative f ) => (e1 n -> f (e2 n ))
3352
3357
-> NameMapE c e1 n -> f (NameMapE c e2 n )
3353
- traverseNameMapE f (NameMapE nmap ) = NameMapE <$> traverseNameMap f nmap
3358
+ traverseNameMapE f (UnsafeNameMapE raw ) = UnsafeNameMapE <$> traverse f raw
3354
3359
{-# INLINE traverseNameMapE #-}
3355
3360
3356
3361
mapNameMapE :: (e1 n -> e2 n )
3357
3362
-> NameMapE c e1 n -> NameMapE c e2 n
3358
- mapNameMapE f (NameMapE nmap ) = NameMapE $ mapNameMap f nmap
3363
+ mapNameMapE f (UnsafeNameMapE raw ) = UnsafeNameMapE $ fmap f raw
3359
3364
{-# INLINE mapNameMapE #-}
3360
3365
3361
3366
keysNameMapE :: NameMapE c e n -> [Name c n ]
3362
- keysNameMapE (NameMapE nmap) = keysNameMap nmap
3367
+ keysNameMapE = map fst . toListNameMapE
3368
+ {-# INLINE keysNameMapE #-}
3363
3369
3364
3370
keySetNameMapE :: (Color c ) => NameMapE c e n -> NameSet n
3365
- keySetNameMapE ( NameMapE nmap) = keySetNameMap nmap
3371
+ keySetNameMapE nmap = freeVarsE $ ListE $ keysNameMapE nmap
3366
3372
3367
3373
instance SinkableE e => SinkableE (NameMapE c e ) where
3368
3374
sinkingProofE = undefined
0 commit comments