Add mapOccEnv
[ghc-hetmet.git] / ghc / compiler / basicTypes / VarSet.lhs
index 261426e..55e82a8 100644 (file)
@@ -5,25 +5,24 @@
 
 \begin{code}
 module VarSet (
-       VarSet, IdSet, TyVarSet, UVarSet,
+       VarSet, IdSet, TyVarSet,
        emptyVarSet, unitVarSet, mkVarSet,
-       extendVarSet,
+       extendVarSet, extendVarSetList, extendVarSet_C,
        elemVarSet, varSetElems, subVarSet,
        unionVarSet, unionVarSets,
        intersectVarSet, intersectsVarSet,
-       isEmptyVarSet, delVarSet, delVarSetByKey,
+       isEmptyVarSet, delVarSet, delVarSetList, delVarSetByKey,
        minusVarSet, foldVarSet, filterVarSet,
-       lookupVarSet, mapVarSet, sizeVarSet, seqVarSet
+       lookupVarSet, mapVarSet, sizeVarSet, seqVarSet,
+       elemVarSetByKey
     ) where
 
 #include "HsVersions.h"
 
-import CmdLineOpts     ( opt_PprStyle_Debug )
-import Var             ( Var, Id, TyVar, UVar, setVarUnique )
-import Unique          ( Unique, Uniquable(..) )
+import Var             ( Var, Id, TyVar )
+import Unique          ( Unique )
 import UniqSet
-import UniqFM          ( delFromUFM_Directly )
-import Outputable
+import UniqFM          ( delFromUFM_Directly, addToUFM_C )
 \end{code}
 
 %************************************************************************
@@ -36,18 +35,18 @@ import Outputable
 type VarSet       = UniqSet Var
 type IdSet       = UniqSet Id
 type TyVarSet    = UniqSet TyVar
-type UVarSet      = UniqSet UVar
 
 emptyVarSet    :: VarSet
 intersectVarSet        :: VarSet -> VarSet -> VarSet
-intersectsVarSet:: VarSet -> VarSet -> Bool    -- True if non-empty intersection
 unionVarSet    :: VarSet -> VarSet -> VarSet
 unionVarSets   :: [VarSet] -> VarSet
 varSetElems    :: VarSet -> [Var]
 unitVarSet     :: Var -> VarSet
 extendVarSet   :: VarSet -> Var -> VarSet
+extendVarSetList:: VarSet -> [Var] -> VarSet
 elemVarSet     :: Var -> VarSet -> Bool
 delVarSet      :: VarSet -> Var -> VarSet
+delVarSetList  :: VarSet -> [Var] -> VarSet
 minusVarSet    :: VarSet -> VarSet -> VarSet
 isEmptyVarSet  :: VarSet -> Bool
 mkVarSet       :: [Var] -> VarSet
@@ -58,21 +57,29 @@ lookupVarSet        :: VarSet -> Var -> Maybe Var
 mapVarSet      :: (Var -> Var) -> VarSet -> VarSet
 sizeVarSet     :: VarSet -> Int
 filterVarSet   :: (Var -> Bool) -> VarSet -> VarSet
-subVarSet      :: VarSet -> VarSet -> Bool
+extendVarSet_C  :: (Var->Var->Var) -> VarSet -> Var -> VarSet
 
 delVarSetByKey :: VarSet -> Unique -> VarSet
+elemVarSetByKey :: Unique -> VarSet -> Bool
 
 emptyVarSet    = emptyUniqSet
 unitVarSet     = unitUniqSet
 extendVarSet   = addOneToUniqSet
+extendVarSetList= addListToUniqSet
 intersectVarSet        = intersectUniqSets
-intersectsVarSet s1 s2 = not (isEmptyVarSet (s1 `intersectVarSet` s2))
+
+intersectsVarSet:: VarSet -> VarSet -> Bool    -- True if non-empty intersection
+       -- (s1 `intersectsVarSet` s2) doesn't compute s2 if s1 is empty
+subVarSet      :: VarSet -> VarSet -> Bool     -- True if first arg is subset of second
+       -- (s1 `subVarSet` s2) doesn't compute s2 if s1 is empty
+
 unionVarSet    = unionUniqSets
 unionVarSets   = unionManyUniqSets
 varSetElems    = uniqSetToList
 elemVarSet     = elementOfUniqSet
 minusVarSet    = minusUniqSet
 delVarSet      = delOneFromUniqSet
+delVarSetList  = delListFromUniqSet
 isEmptyVarSet  = isEmptyUniqSet
 mkVarSet       = mkUniqSet
 foldVarSet     = foldUniqSet
@@ -80,8 +87,15 @@ lookupVarSet = lookupUniqSet
 mapVarSet      = mapUniqSet
 sizeVarSet     = sizeUniqSet
 filterVarSet   = filterUniqSet
-a `subVarSet` b = isEmptyVarSet (a `minusVarSet` b)
+extendVarSet_C combine s x = addToUFM_C combine s x x
 delVarSetByKey = delFromUFM_Directly   -- Can't be bothered to add this to UniqSet
+elemVarSetByKey        = elemUniqSet_Directly
+\end{code}
+
+\begin{code}
+-- See comments with type signatures
+intersectsVarSet s1 s2 = not (isEmptyVarSet (s1 `intersectVarSet` s2))
+a `subVarSet` b = isEmptyVarSet (a `minusVarSet` b)
 \end{code}
 
 \begin{code}