2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section{@VarSet@: Variable sets}
8 VarSet, IdSet, TyVarSet, UVarSet,
9 emptyVarSet, unitVarSet, mkVarSet,
11 elemVarSet, varSetElems, subVarSet,
12 unionVarSet, unionVarSets,
13 intersectVarSet, intersectsVarSet,
14 isEmptyVarSet, delVarSet, delVarSetByKey,
15 minusVarSet, foldVarSet, filterVarSet,
16 lookupVarSet, mapVarSet, sizeVarSet, seqVarSet
19 #include "HsVersions.h"
21 import CmdLineOpts ( opt_PprStyle_Debug )
22 import Var ( Var, Id, TyVar, UVar, setVarUnique )
23 import Unique ( Unique, Uniquable(..) )
25 import UniqFM ( delFromUFM_Directly )
29 %************************************************************************
31 \subsection{@VarSet@s}
33 %************************************************************************
36 type VarSet = UniqSet Var
37 type IdSet = UniqSet Id
38 type TyVarSet = UniqSet TyVar
39 type UVarSet = UniqSet UVar
42 intersectVarSet :: VarSet -> VarSet -> VarSet
43 intersectsVarSet:: VarSet -> VarSet -> Bool -- True if non-empty intersection
44 unionVarSet :: VarSet -> VarSet -> VarSet
45 unionVarSets :: [VarSet] -> VarSet
46 varSetElems :: VarSet -> [Var]
47 unitVarSet :: Var -> VarSet
48 extendVarSet :: VarSet -> Var -> VarSet
49 elemVarSet :: Var -> VarSet -> Bool
50 delVarSet :: VarSet -> Var -> VarSet
51 minusVarSet :: VarSet -> VarSet -> VarSet
52 isEmptyVarSet :: VarSet -> Bool
53 mkVarSet :: [Var] -> VarSet
54 foldVarSet :: (Var -> a -> a) -> a -> VarSet -> a
55 lookupVarSet :: VarSet -> Var -> Maybe Var
56 -- Returns the set element, which may be
57 -- (==) to the argument, but not the same as
58 mapVarSet :: (Var -> Var) -> VarSet -> VarSet
59 sizeVarSet :: VarSet -> Int
60 filterVarSet :: (Var -> Bool) -> VarSet -> VarSet
61 subVarSet :: VarSet -> VarSet -> Bool
63 delVarSetByKey :: VarSet -> Unique -> VarSet
65 emptyVarSet = emptyUniqSet
66 unitVarSet = unitUniqSet
67 extendVarSet = addOneToUniqSet
68 intersectVarSet = intersectUniqSets
69 intersectsVarSet s1 s2 = not (isEmptyVarSet (s1 `intersectVarSet` s2))
70 unionVarSet = unionUniqSets
71 unionVarSets = unionManyUniqSets
72 varSetElems = uniqSetToList
73 elemVarSet = elementOfUniqSet
74 minusVarSet = minusUniqSet
75 delVarSet = delOneFromUniqSet
76 isEmptyVarSet = isEmptyUniqSet
78 foldVarSet = foldUniqSet
79 lookupVarSet = lookupUniqSet
80 mapVarSet = mapUniqSet
81 sizeVarSet = sizeUniqSet
82 filterVarSet = filterUniqSet
83 a `subVarSet` b = isEmptyVarSet (a `minusVarSet` b)
84 delVarSetByKey = delFromUFM_Directly -- Can't be bothered to add this to UniqSet
88 seqVarSet :: VarSet -> ()
89 seqVarSet s = sizeVarSet s `seq` ()