[project @ 2001-10-19 14:22:11 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / NameSet.lhs
index 0f857db..ad313f7 100644 (file)
@@ -9,7 +9,11 @@ module NameSet (
        NameSet,
        emptyNameSet, unitNameSet, mkNameSet, unionNameSets, unionManyNameSets,
        minusNameSet, elemNameSet, nameSetToList, addOneToNameSet, addListToNameSet, 
-       delFromNameSet, delListFromNameSet, isEmptyNameSet,
+       delFromNameSet, delListFromNameSet, isEmptyNameSet, foldNameSet, filterNameSet,
+       
+       -- Free variables
+       FreeVars, isEmptyFVs, emptyFVs, plusFVs, plusFV, 
+       mkFVs, addOneFV, unitFV, delFV, delFVs
     ) where
 
 #include "HsVersions.h"
@@ -40,6 +44,8 @@ nameSetToList    :: NameSet -> [Name]
 isEmptyNameSet    :: NameSet -> Bool
 delFromNameSet    :: NameSet -> Name -> NameSet
 delListFromNameSet :: NameSet -> [Name] -> NameSet
+foldNameSet       :: (Name -> b -> b) -> b -> NameSet -> b
+filterNameSet     :: (Name -> Bool) -> NameSet -> NameSet
 
 isEmptyNameSet    = isEmptyUniqSet
 emptyNameSet     = emptyUniqSet
@@ -53,8 +59,41 @@ minusNameSet   = minusUniqSet
 elemNameSet       = elementOfUniqSet
 nameSetToList     = uniqSetToList
 delFromNameSet    = delOneFromUniqSet
+foldNameSet      = foldUniqSet
+filterNameSet    = filterUniqSet
 
 delListFromNameSet set ns = foldl delFromNameSet set ns
 \end{code}
 
 
+%************************************************************************
+%*                                                                     *
+\subsection{Free variables}
+%*                                                                     *
+%************************************************************************
+
+These synonyms are useful when we are thinking of free variables
+
+\begin{code}
+type FreeVars  = NameSet
+
+plusFV   :: FreeVars -> FreeVars -> FreeVars
+addOneFV :: FreeVars -> Name -> FreeVars
+unitFV   :: Name -> FreeVars
+emptyFVs :: FreeVars
+plusFVs  :: [FreeVars] -> FreeVars
+mkFVs   :: [Name] -> FreeVars
+delFV    :: Name -> FreeVars -> FreeVars
+delFVs   :: [Name] -> FreeVars -> FreeVars
+
+isEmptyFVs  = isEmptyNameSet
+emptyFVs    = emptyNameSet
+plusFVs     = unionManyNameSets
+plusFV      = unionNameSets
+mkFVs      = mkNameSet
+addOneFV    = addOneToNameSet
+unitFV      = unitNameSet
+delFV n s   = delFromNameSet s n
+delFVs ns s = delListFromNameSet s ns
+\end{code}
+