/compiler/GHC/Data/FastString/Env.hs

https://github.com/bgamari/ghc · Haskell · 100 lines · 64 code · 17 blank · 19 comment · 0 complexity · 20d3b9ec1ebdb1a3e85466dbc794ee90 MD5 · raw file

  1. {-
  2. %
  3. % (c) The University of Glasgow 2006
  4. % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
  5. %
  6. -}
  7. -- | FastStringEnv: FastString environments
  8. module GHC.Data.FastString.Env (
  9. -- * FastString environments (maps)
  10. FastStringEnv,
  11. -- ** Manipulating these environments
  12. mkFsEnv,
  13. emptyFsEnv, unitFsEnv,
  14. extendFsEnv_C, extendFsEnv_Acc, extendFsEnv,
  15. extendFsEnvList, extendFsEnvList_C,
  16. filterFsEnv,
  17. plusFsEnv, plusFsEnv_C, alterFsEnv,
  18. lookupFsEnv, lookupFsEnv_NF, delFromFsEnv, delListFromFsEnv,
  19. elemFsEnv, mapFsEnv,
  20. -- * Deterministic FastString environments (maps)
  21. DFastStringEnv,
  22. -- ** Manipulating these environments
  23. mkDFsEnv, emptyDFsEnv, dFsEnvElts, lookupDFsEnv
  24. ) where
  25. import GHC.Prelude
  26. import GHC.Types.Unique.FM
  27. import GHC.Types.Unique.DFM
  28. import GHC.Data.Maybe
  29. import GHC.Data.FastString
  30. -- | A non-deterministic set of FastStrings.
  31. -- See Note [Deterministic UniqFM] in "GHC.Types.Unique.DFM" for explanation why it's not
  32. -- deterministic and why it matters. Use DFastStringEnv if the set eventually
  33. -- gets converted into a list or folded over in a way where the order
  34. -- changes the generated code.
  35. type FastStringEnv a = UniqFM FastString a -- Domain is FastString
  36. emptyFsEnv :: FastStringEnv a
  37. mkFsEnv :: [(FastString,a)] -> FastStringEnv a
  38. alterFsEnv :: (Maybe a-> Maybe a) -> FastStringEnv a -> FastString -> FastStringEnv a
  39. extendFsEnv_C :: (a->a->a) -> FastStringEnv a -> FastString -> a -> FastStringEnv a
  40. extendFsEnv_Acc :: (a->b->b) -> (a->b) -> FastStringEnv b -> FastString -> a -> FastStringEnv b
  41. extendFsEnv :: FastStringEnv a -> FastString -> a -> FastStringEnv a
  42. plusFsEnv :: FastStringEnv a -> FastStringEnv a -> FastStringEnv a
  43. plusFsEnv_C :: (a->a->a) -> FastStringEnv a -> FastStringEnv a -> FastStringEnv a
  44. extendFsEnvList :: FastStringEnv a -> [(FastString,a)] -> FastStringEnv a
  45. extendFsEnvList_C :: (a->a->a) -> FastStringEnv a -> [(FastString,a)] -> FastStringEnv a
  46. delFromFsEnv :: FastStringEnv a -> FastString -> FastStringEnv a
  47. delListFromFsEnv :: FastStringEnv a -> [FastString] -> FastStringEnv a
  48. elemFsEnv :: FastString -> FastStringEnv a -> Bool
  49. unitFsEnv :: FastString -> a -> FastStringEnv a
  50. lookupFsEnv :: FastStringEnv a -> FastString -> Maybe a
  51. lookupFsEnv_NF :: FastStringEnv a -> FastString -> a
  52. filterFsEnv :: (elt -> Bool) -> FastStringEnv elt -> FastStringEnv elt
  53. mapFsEnv :: (elt1 -> elt2) -> FastStringEnv elt1 -> FastStringEnv elt2
  54. emptyFsEnv = emptyUFM
  55. unitFsEnv x y = unitUFM x y
  56. extendFsEnv x y z = addToUFM x y z
  57. extendFsEnvList x l = addListToUFM x l
  58. lookupFsEnv x y = lookupUFM x y
  59. alterFsEnv = alterUFM
  60. mkFsEnv l = listToUFM l
  61. elemFsEnv x y = elemUFM x y
  62. plusFsEnv x y = plusUFM x y
  63. plusFsEnv_C f x y = plusUFM_C f x y
  64. extendFsEnv_C f x y z = addToUFM_C f x y z
  65. mapFsEnv f x = mapUFM f x
  66. extendFsEnv_Acc x y z a b = addToUFM_Acc x y z a b
  67. extendFsEnvList_C x y z = addListToUFM_C x y z
  68. delFromFsEnv x y = delFromUFM x y
  69. delListFromFsEnv x y = delListFromUFM x y
  70. filterFsEnv x y = filterUFM x y
  71. lookupFsEnv_NF env n = expectJust "lookupFsEnv_NF" (lookupFsEnv env n)
  72. -- Deterministic FastStringEnv
  73. -- See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM for explanation why we need
  74. -- DFastStringEnv.
  75. type DFastStringEnv a = UniqDFM FastString a -- Domain is FastString
  76. emptyDFsEnv :: DFastStringEnv a
  77. emptyDFsEnv = emptyUDFM
  78. dFsEnvElts :: DFastStringEnv a -> [a]
  79. dFsEnvElts = eltsUDFM
  80. mkDFsEnv :: [(FastString,a)] -> DFastStringEnv a
  81. mkDFsEnv l = listToUDFM l
  82. lookupDFsEnv :: DFastStringEnv a -> FastString -> Maybe a
  83. lookupDFsEnv = lookupUDFM