Skip to content

Commit b03fdff

Browse files
committed
Reimplement NameMapE in terms of RawNameMap directly.
This is the first step in de-duplicating the NameMap and NameMapE APIs.
1 parent c7373b2 commit b03fdff

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

src/lib/Name.hs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3316,53 +3316,59 @@ keySetNameMap nmap = freeVarsE $ ListE $ keysNameMap nmap
33163316
instance 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.
33243324
hoistNameMapE :: (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

33303333
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
33323336
{-# INLINE insertNameMapE #-}
33333337

33343338
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
33363340
{-# INLINE lookupNameMapE #-}
33373341

33383342
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
33403344
{-# INLINE singletonNameMapE #-}
33413345

33423346
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)
33443349
{-# INLINE toListNameMapE #-}
33453350

33463351
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
33493354
{-# INLINE unionWithNameMapE #-}
33503355

33513356
traverseNameMapE :: (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

33563361
mapNameMapE :: (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

33613366
keysNameMapE :: NameMapE c e n -> [Name c n]
3362-
keysNameMapE (NameMapE nmap) = keysNameMap nmap
3367+
keysNameMapE = map fst . toListNameMapE
3368+
{-# INLINE keysNameMapE #-}
33633369

33643370
keySetNameMapE :: (Color c) => NameMapE c e n -> NameSet n
3365-
keySetNameMapE (NameMapE nmap) = keySetNameMap nmap
3371+
keySetNameMapE nmap = freeVarsE $ ListE $ keysNameMapE nmap
33663372

33673373
instance SinkableE e => SinkableE (NameMapE c e) where
33683374
sinkingProofE = undefined

src/lib/Occurrence.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,10 @@ instance (MaxPlus a) => MaxPlus (NameMap c a n) where
9393
max = unionWithNameMap max
9494
plus = unionWithNameMap plus
9595

96-
deriving instance (MaxPlus (e n)) => MaxPlus (NameMapE c e n)
96+
instance (MaxPlus (e n)) => MaxPlus (NameMapE c e n) where
97+
zero = mempty
98+
max = unionWithNameMapE max
99+
plus = unionWithNameMapE plus
97100

98101
-- === Access ===
99102

0 commit comments

Comments
 (0)