update submodule pointer
[ghc-hetmet.git] / compiler / basicTypes / NameEnv.lhs
index ff63701..984f096 100644 (file)
@@ -1,13 +1,19 @@
 %
+% (c) The University of Glasgow 2006
 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
 %
 \section[NameEnv]{@NameEnv@: name environments}
 
 \begin{code}
 module NameEnv (
-       NameEnv, mkNameEnv,
-       emptyNameEnv, unitNameEnv, nameEnvElts, 
-       extendNameEnv_C, extendNameEnv_Acc, extendNameEnv, extendNameEnvList, 
+       -- * Var, Id and TyVar environments (maps) 
+       NameEnv, 
+       
+       -- ** Manipulating these environments
+       mkNameEnv,
+       emptyNameEnv, unitNameEnv, nameEnvElts, nameEnvUniqueElts,
+       extendNameEnv_C, extendNameEnv_Acc, extendNameEnv,
+        extendNameEnvList, extendNameEnvList_C,
        foldNameEnv, filterNameEnv,
        plusNameEnv, plusNameEnv_C, 
        lookupNameEnv, lookupNameEnv_NF, delFromNameEnv, delListFromNameEnv,
@@ -16,9 +22,10 @@ module NameEnv (
 
 #include "HsVersions.h"
 
-import Name    ( Name )
+import Name
+import Unique
 import UniqFM
-import Maybes  ( expectJust )
+import Maybes
 \end{code}
 
 %************************************************************************
@@ -33,12 +40,14 @@ type NameEnv a = UniqFM a   -- Domain is Name
 emptyNameEnv              :: NameEnv a
 mkNameEnv         :: [(Name,a)] -> NameEnv a
 nameEnvElts               :: NameEnv a -> [a]
+nameEnvUniqueElts  :: NameEnv a -> [(Unique, a)]
 extendNameEnv_C    :: (a->a->a) -> NameEnv a -> Name -> a -> NameEnv a
 extendNameEnv_Acc  :: (a->b->b) -> (a->b) -> NameEnv b -> Name -> a -> NameEnv b
 extendNameEnv             :: NameEnv a -> Name -> a -> NameEnv a
 plusNameEnv               :: NameEnv a -> NameEnv a -> NameEnv a
 plusNameEnv_C             :: (a->a->a) -> NameEnv a -> NameEnv a -> NameEnv a
 extendNameEnvList  :: NameEnv a -> [(Name,a)] -> NameEnv a
+extendNameEnvList_C :: (a->a->a) -> NameEnv a -> [(Name,a)] -> NameEnv a
 delFromNameEnv            :: NameEnv a -> Name -> NameEnv a
 delListFromNameEnv :: NameEnv a -> [Name] -> NameEnv a
 elemNameEnv               :: Name -> NameEnv a -> Bool
@@ -49,24 +58,26 @@ foldNameEnv    :: (a -> b -> b) -> b -> NameEnv a -> b
 filterNameEnv     :: (elt -> Bool) -> NameEnv elt -> NameEnv elt
 mapNameEnv        :: (elt1 -> elt2) -> NameEnv elt1 -> NameEnv elt2
 
-emptyNameEnv               = emptyUFM
-foldNameEnv        = foldUFM
-mkNameEnv          = listToUFM
-nameEnvElts                = eltsUFM
-extendNameEnv_C     = addToUFM_C
-extendNameEnv_Acc   = addToUFM_Acc
-extendNameEnv              = addToUFM
-plusNameEnv                = plusUFM
-plusNameEnv_C              = plusUFM_C
-extendNameEnvList   = addListToUFM
-delFromNameEnv             = delFromUFM
-delListFromNameEnv  = delListFromUFM
-elemNameEnv                = elemUFM
-unitNameEnv                = unitUFM
-filterNameEnv      = filterUFM
-mapNameEnv         = mapUFM
+nameEnvElts x         = eltsUFM x
+emptyNameEnv         = emptyUFM
+unitNameEnv x y       = unitUFM x y 
+extendNameEnv x y z   = addToUFM x y z
+extendNameEnvList x l = addListToUFM x l
+lookupNameEnv x y     = lookupUFM x y
+mkNameEnv     l       = listToUFM l
+elemNameEnv x y         = elemUFM x y
+foldNameEnv a b c       = foldUFM a b c 
+plusNameEnv x y                 = plusUFM x y 
+plusNameEnv_C f x y     = plusUFM_C f x y 
+extendNameEnv_C f x y z  = addToUFM_C f x y z
+mapNameEnv f x                  = mapUFM f x
+nameEnvUniqueElts x      = ufmToList x
+extendNameEnv_Acc x y z a b  = addToUFM_Acc x y z a b
+extendNameEnvList_C x y z = addListToUFM_C x y z
+delFromNameEnv x y      = delFromUFM x y
+delListFromNameEnv x y  = delListFromUFM x y
+filterNameEnv x y       = filterUFM x y
 
-lookupNameEnv                 = lookupUFM
-lookupNameEnv_NF env n = expectJust "lookupNameEnv_NF" (lookupUFM env n)
+lookupNameEnv_NF env n = expectJust "lookupNameEnv_NF" (lookupNameEnv env n)
 \end{code}