Module header tidyup, phase 1
[ghc-hetmet.git] / compiler / basicTypes / VarSet.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5
6 \begin{code}
7 module VarSet (
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,
17         elemVarSetByKey
18     ) where
19
20 #include "HsVersions.h"
21
22 import Var
23 import Unique
24 import UniqSet
25 import UniqFM
26 \end{code}
27
28 %************************************************************************
29 %*                                                                      *
30 \subsection{@VarSet@s}
31 %*                                                                      *
32 %************************************************************************
33
34 \begin{code}
35 type VarSet       = UniqSet Var
36 type IdSet        = UniqSet Id
37 type TyVarSet     = UniqSet TyVar
38
39 emptyVarSet     :: VarSet
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
61
62 delVarSetByKey  :: VarSet -> Unique -> VarSet
63 elemVarSetByKey :: Unique -> VarSet -> Bool
64
65 emptyVarSet     = emptyUniqSet
66 unitVarSet      = unitUniqSet
67 extendVarSet    = addOneToUniqSet
68 extendVarSetList= addListToUniqSet
69 intersectVarSet = intersectUniqSets
70
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
76
77 unionVarSet     = unionUniqSets
78 unionVarSets    = unionManyUniqSets
79 varSetElems     = uniqSetToList
80 elemVarSet      = elementOfUniqSet
81 minusVarSet     = minusUniqSet
82 delVarSet       = delOneFromUniqSet
83 delVarSetList   = delListFromUniqSet
84 isEmptyVarSet   = isEmptyUniqSet
85 mkVarSet        = mkUniqSet
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
94 \end{code}
95
96 \begin{code}
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)
101 \end{code}
102
103 \begin{code}
104 seqVarSet :: VarSet -> ()
105 seqVarSet s = sizeVarSet s `seq` ()
106 \end{code}
107