2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
8 -- The above warning supression flag is a temporary kludge.
9 -- While working on this module you are encouraged to remove it and fix
10 -- any warnings in the module. See
11 -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
15 VarSet, IdSet, TyVarSet,
16 emptyVarSet, unitVarSet, mkVarSet,
17 extendVarSet, extendVarSetList, extendVarSet_C,
18 elemVarSet, varSetElems, subVarSet,
19 unionVarSet, unionVarSets,
20 intersectVarSet, intersectsVarSet, disjointVarSet,
21 isEmptyVarSet, delVarSet, delVarSetList, delVarSetByKey,
22 minusVarSet, foldVarSet, filterVarSet,
23 lookupVarSet, mapVarSet, sizeVarSet, seqVarSet,
27 #include "HsVersions.h"
35 %************************************************************************
37 \subsection{@VarSet@s}
39 %************************************************************************
42 type VarSet = UniqSet Var
43 type IdSet = UniqSet Id
44 type TyVarSet = UniqSet TyVar
47 intersectVarSet :: VarSet -> VarSet -> VarSet
48 unionVarSet :: VarSet -> VarSet -> VarSet
49 unionVarSets :: [VarSet] -> VarSet
50 varSetElems :: VarSet -> [Var]
51 unitVarSet :: Var -> VarSet
52 extendVarSet :: VarSet -> Var -> VarSet
53 extendVarSetList:: VarSet -> [Var] -> VarSet
54 elemVarSet :: Var -> VarSet -> Bool
55 delVarSet :: VarSet -> Var -> VarSet
56 delVarSetList :: VarSet -> [Var] -> VarSet
57 minusVarSet :: VarSet -> VarSet -> VarSet
58 isEmptyVarSet :: VarSet -> Bool
59 mkVarSet :: [Var] -> VarSet
60 foldVarSet :: (Var -> a -> a) -> a -> VarSet -> a
61 lookupVarSet :: VarSet -> Var -> Maybe Var
62 -- Returns the set element, which may be
63 -- (==) to the argument, but not the same as
64 mapVarSet :: (Var -> Var) -> VarSet -> VarSet
65 sizeVarSet :: VarSet -> Int
66 filterVarSet :: (Var -> Bool) -> VarSet -> VarSet
67 extendVarSet_C :: (Var->Var->Var) -> VarSet -> Var -> VarSet
69 delVarSetByKey :: VarSet -> Unique -> VarSet
70 elemVarSetByKey :: Unique -> VarSet -> Bool
72 emptyVarSet = emptyUniqSet
73 unitVarSet = unitUniqSet
74 extendVarSet = addOneToUniqSet
75 extendVarSetList= addListToUniqSet
76 intersectVarSet = intersectUniqSets
78 intersectsVarSet:: VarSet -> VarSet -> Bool -- True if non-empty intersection
79 disjointVarSet :: VarSet -> VarSet -> Bool -- True if empty intersection
80 subVarSet :: VarSet -> VarSet -> Bool -- True if first arg is subset of second
81 -- (s1 `intersectsVarSet` s2) doesn't compute s2 if s1 is empty;
82 -- ditto disjointVarSet, subVarSet
84 unionVarSet = unionUniqSets
85 unionVarSets = unionManyUniqSets
86 varSetElems = uniqSetToList
87 elemVarSet = elementOfUniqSet
88 minusVarSet = minusUniqSet
89 delVarSet = delOneFromUniqSet
90 delVarSetList = delListFromUniqSet
91 isEmptyVarSet = isEmptyUniqSet
93 foldVarSet = foldUniqSet
94 lookupVarSet = lookupUniqSet
95 mapVarSet = mapUniqSet
96 sizeVarSet = sizeUniqSet
97 filterVarSet = filterUniqSet
98 extendVarSet_C combine s x = addToUFM_C combine s x x
99 delVarSetByKey = delFromUFM_Directly -- Can't be bothered to add this to UniqSet
100 elemVarSetByKey = elemUniqSet_Directly
104 -- See comments with type signatures
105 intersectsVarSet s1 s2 = not (s1 `disjointVarSet` s2)
106 disjointVarSet s1 s2 = isEmptyVarSet (s1 `intersectVarSet` s2)
107 subVarSet s1 s2 = isEmptyVarSet (s1 `minusVarSet` s2)
111 seqVarSet :: VarSet -> ()
112 seqVarSet s = sizeVarSet s `seq` ()