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