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"
28 %************************************************************************
30 \subsection{@VarSet@s}
32 %************************************************************************
35 type VarSet = UniqSet Var
36 type IdSet = UniqSet Id
37 type TyVarSet = UniqSet TyVar
40 intersectVarSet :: VarSet -> VarSet -> VarSet
41 unionVarSet :: VarSet -> VarSet -> VarSet
42 unionVarSets :: [VarSet] -> VarSet
43 varSetElems :: VarSet -> [Var]
44 unitVarSet :: Var -> VarSet
45 extendVarSet :: VarSet -> Var -> VarSet
46 extendVarSetList:: VarSet -> [Var] -> VarSet
47 elemVarSet :: Var -> VarSet -> Bool
48 delVarSet :: VarSet -> Var -> VarSet
49 delVarSetList :: VarSet -> [Var] -> VarSet
50 minusVarSet :: VarSet -> VarSet -> VarSet
51 isEmptyVarSet :: VarSet -> Bool
52 mkVarSet :: [Var] -> VarSet
53 foldVarSet :: (Var -> a -> a) -> a -> VarSet -> a
54 lookupVarSet :: VarSet -> Var -> Maybe Var
55 -- Returns the set element, which may be
56 -- (==) to the argument, but not the same as
57 mapVarSet :: (Var -> Var) -> VarSet -> VarSet
58 sizeVarSet :: VarSet -> Int
59 filterVarSet :: (Var -> Bool) -> VarSet -> VarSet
60 extendVarSet_C :: (Var->Var->Var) -> VarSet -> Var -> VarSet
62 delVarSetByKey :: VarSet -> Unique -> VarSet
63 elemVarSetByKey :: Unique -> VarSet -> Bool
65 emptyVarSet = emptyUniqSet
66 unitVarSet = unitUniqSet
67 extendVarSet = addOneToUniqSet
68 extendVarSetList= addListToUniqSet
69 intersectVarSet = intersectUniqSets
71 intersectsVarSet:: VarSet -> VarSet -> Bool -- True if non-empty intersection
72 disjointVarSet :: VarSet -> VarSet -> Bool -- True if empty intersection
73 subVarSet :: VarSet -> VarSet -> Bool -- True if first arg is subset of second
74 -- (s1 `intersectsVarSet` s2) doesn't compute s2 if s1 is empty;
75 -- ditto disjointVarSet, subVarSet
77 unionVarSet = unionUniqSets
78 unionVarSets = unionManyUniqSets
79 varSetElems = uniqSetToList
80 elemVarSet = elementOfUniqSet
81 minusVarSet = minusUniqSet
82 delVarSet = delOneFromUniqSet
83 delVarSetList = delListFromUniqSet
84 isEmptyVarSet = isEmptyUniqSet
86 foldVarSet = foldUniqSet
87 lookupVarSet = lookupUniqSet
88 mapVarSet = mapUniqSet
89 sizeVarSet = sizeUniqSet
90 filterVarSet = filterUniqSet
91 extendVarSet_C combine s x = addToUFM_C combine s x x
92 delVarSetByKey = delFromUFM_Directly -- Can't be bothered to add this to UniqSet
93 elemVarSetByKey = elemUniqSet_Directly
97 -- See comments with type signatures
98 intersectsVarSet s1 s2 = not (s1 `disjointVarSet` s2)
99 disjointVarSet s1 s2 = isEmptyVarSet (s1 `intersectVarSet` s2)
100 subVarSet s1 s2 = isEmptyVarSet (s1 `minusVarSet` s2)
104 seqVarSet :: VarSet -> ()
105 seqVarSet s = sizeVarSet s `seq` ()