PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/compiler/utils/FastStringEnv.hs

http://github.com/ghc/ghc
Haskell | 95 lines | 61 code | 15 blank | 19 comment | 0 complexity | 3ab9ce580f72dfb258124f3891c9d946 MD5 | raw file
Possible License(s): MIT, BSD-3-Clause, GPL-3.0
  1. {-
  2. %
  3. % (c) The University of Glasgow 2006
  4. % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
  5. %
  6. \section[FastStringEnv]{@FastStringEnv@: FastString environments}
  7. -}
  8. module FastStringEnv (
  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,
  24. ) where
  25. import UniqFM
  26. import UniqDFM
  27. import Maybes
  28. import FastString
  29. -- | A non-deterministic set of FastStrings.
  30. -- See Note [Deterministic UniqFM] in UniqDFM for explanation why it's not
  31. -- deterministic and why it matters. Use DFastStringEnv if the set eventually
  32. -- gets converted into a list or folded over in a way where the order
  33. -- changes the generated code.
  34. type FastStringEnv a = UniqFM a -- Domain is FastString
  35. emptyFsEnv :: FastStringEnv a
  36. mkFsEnv :: [(FastString,a)] -> FastStringEnv a
  37. alterFsEnv :: (Maybe a-> Maybe a) -> FastStringEnv a -> FastString -> FastStringEnv a
  38. extendFsEnv_C :: (a->a->a) -> FastStringEnv a -> FastString -> a -> FastStringEnv a
  39. extendFsEnv_Acc :: (a->b->b) -> (a->b) -> FastStringEnv b -> FastString -> a -> FastStringEnv b
  40. extendFsEnv :: FastStringEnv a -> FastString -> a -> FastStringEnv a
  41. plusFsEnv :: FastStringEnv a -> FastStringEnv a -> FastStringEnv a
  42. plusFsEnv_C :: (a->a->a) -> FastStringEnv a -> FastStringEnv a -> FastStringEnv a
  43. extendFsEnvList :: FastStringEnv a -> [(FastString,a)] -> FastStringEnv a
  44. extendFsEnvList_C :: (a->a->a) -> FastStringEnv a -> [(FastString,a)] -> FastStringEnv a
  45. delFromFsEnv :: FastStringEnv a -> FastString -> FastStringEnv a
  46. delListFromFsEnv :: FastStringEnv a -> [FastString] -> FastStringEnv a
  47. elemFsEnv :: FastString -> FastStringEnv a -> Bool
  48. unitFsEnv :: FastString -> a -> FastStringEnv a
  49. lookupFsEnv :: FastStringEnv a -> FastString -> Maybe a
  50. lookupFsEnv_NF :: FastStringEnv a -> FastString -> a
  51. filterFsEnv :: (elt -> Bool) -> FastStringEnv elt -> FastStringEnv elt
  52. mapFsEnv :: (elt1 -> elt2) -> FastStringEnv elt1 -> FastStringEnv elt2
  53. emptyFsEnv = emptyUFM
  54. unitFsEnv x y = unitUFM x y
  55. extendFsEnv x y z = addToUFM x y z
  56. extendFsEnvList x l = addListToUFM x l
  57. lookupFsEnv x y = lookupUFM x y
  58. alterFsEnv = alterUFM
  59. mkFsEnv l = listToUFM l
  60. elemFsEnv x y = elemUFM x y
  61. plusFsEnv x y = plusUFM x y
  62. plusFsEnv_C f x y = plusUFM_C f x y
  63. extendFsEnv_C f x y z = addToUFM_C f x y z
  64. mapFsEnv f x = mapUFM f x
  65. extendFsEnv_Acc x y z a b = addToUFM_Acc x y z a b
  66. extendFsEnvList_C x y z = addListToUFM_C x y z
  67. delFromFsEnv x y = delFromUFM x y
  68. delListFromFsEnv x y = delListFromUFM x y
  69. filterFsEnv x y = filterUFM x y
  70. lookupFsEnv_NF env n = expectJust "lookupFsEnv_NF" (lookupFsEnv env n)
  71. -- Deterministic FastStringEnv
  72. -- See Note [Deterministic UniqFM] in UniqDFM for explanation why we need
  73. -- DFastStringEnv.
  74. type DFastStringEnv a = UniqDFM a -- Domain is FastString
  75. emptyDFsEnv :: DFastStringEnv a
  76. emptyDFsEnv = emptyUDFM
  77. dFsEnvElts :: DFastStringEnv a -> [a]
  78. dFsEnvElts = eltsUDFM
  79. mkDFsEnv :: [(FastString,a)] -> DFastStringEnv a
  80. mkDFsEnv l = listToUDFM l