@@ -3316,53 +3316,59 @@ keySetNameMap nmap = freeVarsE $ ListE $ keysNameMap nmap
33163316instance SinkableE (NameMap c a ) where
33173317 sinkingProofE = undefined
33183318
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 ))
33203320 deriving (Eq , Semigroup , Monoid , Store )
33213321
33223322-- Filters out the entry(ies) for the binder being hoisted above,
33233323-- and hoists the values of the remaining entries.
33243324hoistNameMapE :: (BindsNames b , HoistableE e , ShowE e )
33253325 => 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
33283331{-# INLINE hoistNameMapE #-}
33293332
33303333insertNameMapE :: 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
33323336{-# INLINE insertNameMapE #-}
33333337
33343338lookupNameMapE :: 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
33363340{-# INLINE lookupNameMapE #-}
33373341
33383342singletonNameMapE :: 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
33403344{-# INLINE singletonNameMapE #-}
33413345
33423346toListNameMapE :: 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)
33443349{-# INLINE toListNameMapE #-}
33453350
33463351unionWithNameMapE :: (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
33493354{-# INLINE unionWithNameMapE #-}
33503355
33513356traverseNameMapE :: (Applicative f ) => (e1 n -> f (e2 n ))
33523357 -> 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
33543359{-# INLINE traverseNameMapE #-}
33553360
33563361mapNameMapE :: (e1 n -> e2 n )
33573362 -> 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
33593364{-# INLINE mapNameMapE #-}
33603365
33613366keysNameMapE :: NameMapE c e n -> [Name c n ]
3362- keysNameMapE (NameMapE nmap) = keysNameMap nmap
3367+ keysNameMapE = map fst . toListNameMapE
3368+ {-# INLINE keysNameMapE #-}
33633369
33643370keySetNameMapE :: (Color c ) => NameMapE c e n -> NameSet n
3365- keySetNameMapE ( NameMapE nmap) = keySetNameMap nmap
3371+ keySetNameMapE nmap = freeVarsE $ ListE $ keysNameMapE nmap
33663372
33673373instance SinkableE e => SinkableE (NameMapE c e ) where
33683374 sinkingProofE = undefined
0 commit comments