PageRenderTime 34ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/ghc-7.0.4/compiler/basicTypes/NameEnv.lhs

http://picorec.googlecode.com/
Haskell | 83 lines | 71 code | 10 blank | 2 comment | 0 complexity | 151a8b5aa9438de40a5c991a7a5cd7ab MD5 | raw file
Possible License(s): BSD-3-Clause, BSD-2-Clause
  1. %
  2. % (c) The University of Glasgow 2006
  3. % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
  4. %
  5. \section[NameEnv]{@NameEnv@: name environments}
  6. \begin{code}
  7. module NameEnv (
  8. -- * Var, Id and TyVar environments (maps)
  9. NameEnv,
  10. -- ** Manipulating these environments
  11. mkNameEnv,
  12. emptyNameEnv, unitNameEnv, nameEnvElts, nameEnvUniqueElts,
  13. extendNameEnv_C, extendNameEnv_Acc, extendNameEnv,
  14. extendNameEnvList, extendNameEnvList_C,
  15. foldNameEnv, filterNameEnv,
  16. plusNameEnv, plusNameEnv_C,
  17. lookupNameEnv, lookupNameEnv_NF, delFromNameEnv, delListFromNameEnv,
  18. elemNameEnv, mapNameEnv
  19. ) where
  20. #include "HsVersions.h"
  21. import Name
  22. import Unique
  23. import UniqFM
  24. import Maybes
  25. \end{code}
  26. %************************************************************************
  27. %* *
  28. \subsection{Name environment}
  29. %* *
  30. %************************************************************************
  31. \begin{code}
  32. type NameEnv a = UniqFM a -- Domain is Name
  33. emptyNameEnv :: NameEnv a
  34. mkNameEnv :: [(Name,a)] -> NameEnv a
  35. nameEnvElts :: NameEnv a -> [a]
  36. nameEnvUniqueElts :: NameEnv a -> [(Unique, a)]
  37. extendNameEnv_C :: (a->a->a) -> NameEnv a -> Name -> a -> NameEnv a
  38. extendNameEnv_Acc :: (a->b->b) -> (a->b) -> NameEnv b -> Name -> a -> NameEnv b
  39. extendNameEnv :: NameEnv a -> Name -> a -> NameEnv a
  40. plusNameEnv :: NameEnv a -> NameEnv a -> NameEnv a
  41. plusNameEnv_C :: (a->a->a) -> NameEnv a -> NameEnv a -> NameEnv a
  42. extendNameEnvList :: NameEnv a -> [(Name,a)] -> NameEnv a
  43. extendNameEnvList_C :: (a->a->a) -> NameEnv a -> [(Name,a)] -> NameEnv a
  44. delFromNameEnv :: NameEnv a -> Name -> NameEnv a
  45. delListFromNameEnv :: NameEnv a -> [Name] -> NameEnv a
  46. elemNameEnv :: Name -> NameEnv a -> Bool
  47. unitNameEnv :: Name -> a -> NameEnv a
  48. lookupNameEnv :: NameEnv a -> Name -> Maybe a
  49. lookupNameEnv_NF :: NameEnv a -> Name -> a
  50. foldNameEnv :: (a -> b -> b) -> b -> NameEnv a -> b
  51. filterNameEnv :: (elt -> Bool) -> NameEnv elt -> NameEnv elt
  52. mapNameEnv :: (elt1 -> elt2) -> NameEnv elt1 -> NameEnv elt2
  53. nameEnvElts x = eltsUFM x
  54. emptyNameEnv = emptyUFM
  55. unitNameEnv x y = unitUFM x y
  56. extendNameEnv x y z = addToUFM x y z
  57. extendNameEnvList x l = addListToUFM x l
  58. lookupNameEnv x y = lookupUFM x y
  59. mkNameEnv l = listToUFM l
  60. elemNameEnv x y = elemUFM x y
  61. foldNameEnv a b c = foldUFM a b c
  62. plusNameEnv x y = plusUFM x y
  63. plusNameEnv_C f x y = plusUFM_C f x y
  64. extendNameEnv_C f x y z = addToUFM_C f x y z
  65. mapNameEnv f x = mapUFM f x
  66. nameEnvUniqueElts x = ufmToList x
  67. extendNameEnv_Acc x y z a b = addToUFM_Acc x y z a b
  68. extendNameEnvList_C x y z = addListToUFM_C x y z
  69. delFromNameEnv x y = delFromUFM x y
  70. delListFromNameEnv x y = delListFromUFM x y
  71. filterNameEnv x y = filterUFM x y
  72. lookupNameEnv_NF env n = expectJust "lookupNameEnv_NF" (lookupNameEnv env n)
  73. \end{code}