2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
8 VarSet, IdSet, TyVarSet,
9 emptyVarSet, unitVarSet, mkVarSet,
10 extendVarSet, extendVarSetList, extendVarSet_C,
11 elemVarSet, varSetElems, subVarSet,
12 unionVarSet, unionVarSets,
13 intersectVarSet, intersectsVarSet, disjointVarSet,
14 isEmptyVarSet, delVarSet, delVarSetList, delVarSetByKey,
15 minusVarSet, foldVarSet, filterVarSet,
16 lookupVarSet, mapVarSet, sizeVarSet, seqVarSet,
20 #include "HsVersions.h"
27 %************************************************************************
29 \subsection{@VarSet@s}
31 %************************************************************************
34 type VarSet = UniqSet Var
35 type IdSet = UniqSet Id
36 type TyVarSet = UniqSet TyVar
39 intersectVarSet :: VarSet -> VarSet -> VarSet
40 unionVarSet :: VarSet -> VarSet -> VarSet
41 unionVarSets :: [VarSet] -> VarSet
42 varSetElems :: VarSet -> [Var]
43 unitVarSet :: Var -> VarSet
44 extendVarSet :: VarSet -> Var -> VarSet
45 extendVarSetList:: VarSet -> [Var] -> VarSet
46 elemVarSet :: Var -> VarSet -> Bool
47 delVarSet :: VarSet -> Var -> VarSet
48 delVarSetList :: VarSet -> [Var] -> VarSet
49 minusVarSet :: VarSet -> VarSet -> VarSet
50 isEmptyVarSet :: VarSet -> Bool
51 mkVarSet :: [Var] -> VarSet
52 foldVarSet :: (Var -> a -> a) -> a -> VarSet -> a
53 lookupVarSet :: VarSet -> Var -> Maybe Var
54 -- Returns the set element, which may be
55 -- (==) to the argument, but not the same as
56 mapVarSet :: (Var -> Var) -> VarSet -> VarSet
57 sizeVarSet :: VarSet -> Int
58 filterVarSet :: (Var -> Bool) -> VarSet -> VarSet
59 extendVarSet_C :: (Var->Var->Var) -> VarSet -> Var -> VarSet
61 delVarSetByKey :: VarSet -> Unique -> VarSet
62 elemVarSetByKey :: Unique -> VarSet -> Bool
64 emptyVarSet = emptyUniqSet
65 unitVarSet = unitUniqSet
66 extendVarSet = addOneToUniqSet
67 extendVarSetList= addListToUniqSet
68 intersectVarSet = intersectUniqSets
70 intersectsVarSet:: VarSet -> VarSet -> Bool -- True if non-empty intersection
71 disjointVarSet :: VarSet -> VarSet -> Bool -- True if empty intersection
72 subVarSet :: VarSet -> VarSet -> Bool -- True if first arg is subset of second
73 -- (s1 `intersectsVarSet` s2) doesn't compute s2 if s1 is empty;
74 -- ditto disjointVarSet, subVarSet
76 unionVarSet = unionUniqSets
77 unionVarSets = unionManyUniqSets
78 varSetElems = uniqSetToList
79 elemVarSet = elementOfUniqSet
80 minusVarSet = minusUniqSet
81 delVarSet = delOneFromUniqSet
82 delVarSetList = delListFromUniqSet
83 isEmptyVarSet = isEmptyUniqSet
85 foldVarSet = foldUniqSet
86 lookupVarSet = lookupUniqSet
87 mapVarSet = mapUniqSet
88 sizeVarSet = sizeUniqSet
89 filterVarSet = filterUniqSet
90 extendVarSet_C = addOneToUniqSet_C
91 delVarSetByKey = delOneFromUniqSet_Directly
92 elemVarSetByKey = elemUniqSet_Directly
96 -- See comments with type signatures
97 intersectsVarSet s1 s2 = not (s1 `disjointVarSet` s2)
98 disjointVarSet s1 s2 = isEmptyVarSet (s1 `intersectVarSet` s2)
99 subVarSet s1 s2 = isEmptyVarSet (s1 `minusVarSet` s2)
103 seqVarSet :: VarSet -> ()
104 seqVarSet s = sizeVarSet s `seq` ()