[project @ 2000-10-25 07:09:52 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / NameSet.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1998
3 %
4 \section[NameSet]{@NameSets@} 
5
6 \begin{code}
7 module NameSet (
8         -- Sets of Names
9         NameSet,
10         emptyNameSet, unitNameSet, mkNameSet, unionNameSets, unionManyNameSets,
11         minusNameSet, elemNameSet, nameSetToList, addOneToNameSet, addListToNameSet, 
12         delFromNameSet, delListFromNameSet, isEmptyNameSet, foldNameSet, filterNameSet,
13         
14         -- Free variables
15         FreeVars, isEmptyFVs, emptyFVs, plusFVs, plusFV, 
16         mkFVs, addOneFV, unitFV, delFV, delFVs
17     ) where
18
19 #include "HsVersions.h"
20
21 import Name
22 import UniqSet
23 \end{code}
24
25
26 %************************************************************************
27 %*                                                                      *
28 \subsection[Sets of names}
29 %*                                                                      *
30 %************************************************************************
31
32 \begin{code}
33 type NameSet = UniqSet Name
34 emptyNameSet       :: NameSet
35 unitNameSet        :: Name -> NameSet
36 addListToNameSet   :: NameSet -> [Name] -> NameSet
37 addOneToNameSet    :: NameSet -> Name -> NameSet
38 mkNameSet          :: [Name] -> NameSet
39 unionNameSets      :: NameSet -> NameSet -> NameSet
40 unionManyNameSets  :: [NameSet] -> NameSet
41 minusNameSet       :: NameSet -> NameSet -> NameSet
42 elemNameSet        :: Name -> NameSet -> Bool
43 nameSetToList      :: NameSet -> [Name]
44 isEmptyNameSet     :: NameSet -> Bool
45 delFromNameSet     :: NameSet -> Name -> NameSet
46 delListFromNameSet :: NameSet -> [Name] -> NameSet
47 foldNameSet        :: (Name -> b -> b) -> b -> NameSet -> b
48 filterNameSet      :: (Name -> Bool) -> NameSet -> NameSet
49
50 isEmptyNameSet    = isEmptyUniqSet
51 emptyNameSet      = emptyUniqSet
52 unitNameSet       = unitUniqSet
53 mkNameSet         = mkUniqSet
54 addListToNameSet  = addListToUniqSet
55 addOneToNameSet   = addOneToUniqSet
56 unionNameSets     = unionUniqSets
57 unionManyNameSets = unionManyUniqSets
58 minusNameSet      = minusUniqSet
59 elemNameSet       = elementOfUniqSet
60 nameSetToList     = uniqSetToList
61 delFromNameSet    = delOneFromUniqSet
62 foldNameSet       = foldUniqSet
63 filterNameSet     = filterUniqSet
64
65 delListFromNameSet set ns = foldl delFromNameSet set ns
66 \end{code}
67
68
69 %************************************************************************
70 %*                                                                      *
71 \subsection{Free variables}
72 %*                                                                      *
73 %************************************************************************
74
75 These synonyms are useful when we are thinking of free variables
76
77 \begin{code}
78 type FreeVars   = NameSet
79
80 plusFV   :: FreeVars -> FreeVars -> FreeVars
81 addOneFV :: FreeVars -> Name -> FreeVars
82 unitFV   :: Name -> FreeVars
83 emptyFVs :: FreeVars
84 plusFVs  :: [FreeVars] -> FreeVars
85 mkFVs    :: [Name] -> FreeVars
86 delFV    :: Name -> FreeVars -> FreeVars
87 delFVs   :: [Name] -> FreeVars -> FreeVars
88
89 isEmptyFVs  = isEmptyNameSet
90 emptyFVs    = emptyNameSet
91 plusFVs     = unionManyNameSets
92 plusFV      = unionNameSets
93 mkFVs       = mkNameSet
94 addOneFV    = addOneToNameSet
95 unitFV      = unitNameSet
96 delFV n s   = delFromNameSet s n
97 delFVs ns s = delListFromNameSet s ns
98 \end{code}
99