/compiler/utils/FastStringEnv.hs
http://github.com/ghc/ghc · Haskell · 95 lines · 61 code · 15 blank · 19 comment · 0 complexity · 3ab9ce580f72dfb258124f3891c9d946 MD5 · raw file
- {-
- %
- % (c) The University of Glasgow 2006
- % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
- %
- \section[FastStringEnv]{@FastStringEnv@: FastString environments}
- -}
- module FastStringEnv (
- -- * FastString environments (maps)
- FastStringEnv,
- -- ** Manipulating these environments
- mkFsEnv,
- emptyFsEnv, unitFsEnv,
- extendFsEnv_C, extendFsEnv_Acc, extendFsEnv,
- extendFsEnvList, extendFsEnvList_C,
- filterFsEnv,
- plusFsEnv, plusFsEnv_C, alterFsEnv,
- lookupFsEnv, lookupFsEnv_NF, delFromFsEnv, delListFromFsEnv,
- elemFsEnv, mapFsEnv,
- -- * Deterministic FastString environments (maps)
- DFastStringEnv,
- -- ** Manipulating these environments
- mkDFsEnv, emptyDFsEnv, dFsEnvElts,
- ) where
- import UniqFM
- import UniqDFM
- import Maybes
- import FastString
- -- | A non-deterministic set of FastStrings.
- -- See Note [Deterministic UniqFM] in UniqDFM for explanation why it's not
- -- deterministic and why it matters. Use DFastStringEnv if the set eventually
- -- gets converted into a list or folded over in a way where the order
- -- changes the generated code.
- type FastStringEnv a = UniqFM a -- Domain is FastString
- emptyFsEnv :: FastStringEnv a
- mkFsEnv :: [(FastString,a)] -> FastStringEnv a
- alterFsEnv :: (Maybe a-> Maybe a) -> FastStringEnv a -> FastString -> FastStringEnv a
- extendFsEnv_C :: (a->a->a) -> FastStringEnv a -> FastString -> a -> FastStringEnv a
- extendFsEnv_Acc :: (a->b->b) -> (a->b) -> FastStringEnv b -> FastString -> a -> FastStringEnv b
- extendFsEnv :: FastStringEnv a -> FastString -> a -> FastStringEnv a
- plusFsEnv :: FastStringEnv a -> FastStringEnv a -> FastStringEnv a
- plusFsEnv_C :: (a->a->a) -> FastStringEnv a -> FastStringEnv a -> FastStringEnv a
- extendFsEnvList :: FastStringEnv a -> [(FastString,a)] -> FastStringEnv a
- extendFsEnvList_C :: (a->a->a) -> FastStringEnv a -> [(FastString,a)] -> FastStringEnv a
- delFromFsEnv :: FastStringEnv a -> FastString -> FastStringEnv a
- delListFromFsEnv :: FastStringEnv a -> [FastString] -> FastStringEnv a
- elemFsEnv :: FastString -> FastStringEnv a -> Bool
- unitFsEnv :: FastString -> a -> FastStringEnv a
- lookupFsEnv :: FastStringEnv a -> FastString -> Maybe a
- lookupFsEnv_NF :: FastStringEnv a -> FastString -> a
- filterFsEnv :: (elt -> Bool) -> FastStringEnv elt -> FastStringEnv elt
- mapFsEnv :: (elt1 -> elt2) -> FastStringEnv elt1 -> FastStringEnv elt2
- emptyFsEnv = emptyUFM
- unitFsEnv x y = unitUFM x y
- extendFsEnv x y z = addToUFM x y z
- extendFsEnvList x l = addListToUFM x l
- lookupFsEnv x y = lookupUFM x y
- alterFsEnv = alterUFM
- mkFsEnv l = listToUFM l
- elemFsEnv x y = elemUFM x y
- plusFsEnv x y = plusUFM x y
- plusFsEnv_C f x y = plusUFM_C f x y
- extendFsEnv_C f x y z = addToUFM_C f x y z
- mapFsEnv f x = mapUFM f x
- extendFsEnv_Acc x y z a b = addToUFM_Acc x y z a b
- extendFsEnvList_C x y z = addListToUFM_C x y z
- delFromFsEnv x y = delFromUFM x y
- delListFromFsEnv x y = delListFromUFM x y
- filterFsEnv x y = filterUFM x y
- lookupFsEnv_NF env n = expectJust "lookupFsEnv_NF" (lookupFsEnv env n)
- -- Deterministic FastStringEnv
- -- See Note [Deterministic UniqFM] in UniqDFM for explanation why we need
- -- DFastStringEnv.
- type DFastStringEnv a = UniqDFM a -- Domain is FastString
- emptyDFsEnv :: DFastStringEnv a
- emptyDFsEnv = emptyUDFM
- dFsEnvElts :: DFastStringEnv a -> [a]
- dFsEnvElts = eltsUDFM
- mkDFsEnv :: [(FastString,a)] -> DFastStringEnv a
- mkDFsEnv l = listToUDFM l