Fix CodingStyle#Warnings URLs
[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 {-# OPTIONS -w #-}
8 -- The above warning supression flag is a temporary kludge.
9 -- While working on this module you are encouraged to remove it and fix
10 -- any warnings in the module. See
11 --     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
12 -- for details
13
14 module VarSet (
15         VarSet, IdSet, TyVarSet,
16         emptyVarSet, unitVarSet, mkVarSet,
17         extendVarSet, extendVarSetList, extendVarSet_C,
18         elemVarSet, varSetElems, subVarSet,
19         unionVarSet, unionVarSets,
20         intersectVarSet, intersectsVarSet, disjointVarSet,
21         isEmptyVarSet, delVarSet, delVarSetList, delVarSetByKey,
22         minusVarSet, foldVarSet, filterVarSet,
23         lookupVarSet, mapVarSet, sizeVarSet, seqVarSet,
24         elemVarSetByKey
25     ) where
26
27 #include "HsVersions.h"
28
29 import Var
30 import Unique
31 import UniqSet
32 import UniqFM
33 \end{code}
34
35 %************************************************************************
36 %*                                                                      *
37 \subsection{@VarSet@s}
38 %*                                                                      *
39 %************************************************************************
40
41 \begin{code}
42 type VarSet       = UniqSet Var
43 type IdSet        = UniqSet Id
44 type TyVarSet     = UniqSet TyVar
45
46 emptyVarSet     :: VarSet
47 intersectVarSet :: VarSet -> VarSet -> VarSet
48 unionVarSet     :: VarSet -> VarSet -> VarSet
49 unionVarSets    :: [VarSet] -> VarSet
50 varSetElems     :: VarSet -> [Var]
51 unitVarSet      :: Var -> VarSet
52 extendVarSet    :: VarSet -> Var -> VarSet
53 extendVarSetList:: VarSet -> [Var] -> VarSet
54 elemVarSet      :: Var -> VarSet -> Bool
55 delVarSet       :: VarSet -> Var -> VarSet
56 delVarSetList   :: VarSet -> [Var] -> VarSet
57 minusVarSet     :: VarSet -> VarSet -> VarSet
58 isEmptyVarSet   :: VarSet -> Bool
59 mkVarSet        :: [Var] -> VarSet
60 foldVarSet      :: (Var -> a -> a) -> a -> VarSet -> a
61 lookupVarSet    :: VarSet -> Var -> Maybe Var
62                         -- Returns the set element, which may be
63                         -- (==) to the argument, but not the same as
64 mapVarSet       :: (Var -> Var) -> VarSet -> VarSet
65 sizeVarSet      :: VarSet -> Int
66 filterVarSet    :: (Var -> Bool) -> VarSet -> VarSet
67 extendVarSet_C  :: (Var->Var->Var) -> VarSet -> Var -> VarSet
68
69 delVarSetByKey  :: VarSet -> Unique -> VarSet
70 elemVarSetByKey :: Unique -> VarSet -> Bool
71
72 emptyVarSet     = emptyUniqSet
73 unitVarSet      = unitUniqSet
74 extendVarSet    = addOneToUniqSet
75 extendVarSetList= addListToUniqSet
76 intersectVarSet = intersectUniqSets
77
78 intersectsVarSet:: VarSet -> VarSet -> Bool     -- True if non-empty intersection
79 disjointVarSet  :: VarSet -> VarSet -> Bool     -- True if empty intersection
80 subVarSet       :: VarSet -> VarSet -> Bool     -- True if first arg is subset of second
81         -- (s1 `intersectsVarSet` s2) doesn't compute s2 if s1 is empty; 
82         -- ditto disjointVarSet, subVarSet
83
84 unionVarSet     = unionUniqSets
85 unionVarSets    = unionManyUniqSets
86 varSetElems     = uniqSetToList
87 elemVarSet      = elementOfUniqSet
88 minusVarSet     = minusUniqSet
89 delVarSet       = delOneFromUniqSet
90 delVarSetList   = delListFromUniqSet
91 isEmptyVarSet   = isEmptyUniqSet
92 mkVarSet        = mkUniqSet
93 foldVarSet      = foldUniqSet
94 lookupVarSet    = lookupUniqSet
95 mapVarSet       = mapUniqSet
96 sizeVarSet      = sizeUniqSet
97 filterVarSet    = filterUniqSet
98 extendVarSet_C combine s x = addToUFM_C combine s x x
99 delVarSetByKey  = delFromUFM_Directly   -- Can't be bothered to add this to UniqSet
100 elemVarSetByKey = elemUniqSet_Directly
101 \end{code}
102
103 \begin{code}
104 -- See comments with type signatures
105 intersectsVarSet s1 s2 = not (s1 `disjointVarSet` s2)
106 disjointVarSet   s1 s2 = isEmptyVarSet (s1 `intersectVarSet` s2)
107 subVarSet        s1 s2 = isEmptyVarSet (s1 `minusVarSet` s2)
108 \end{code}
109
110 \begin{code}
111 seqVarSet :: VarSet -> ()
112 seqVarSet s = sizeVarSet s `seq` ()
113 \end{code}
114