2 % (c) The GRASP/AQUA Project, Glasgow University, 1998
4 \section[NameSet]{@NameSets@}
10 emptyNameSet, unitNameSet, mkNameSet, unionNameSets, unionManyNameSets,
11 minusNameSet, elemNameSet, nameSetToList, addOneToNameSet, addListToNameSet,
12 delFromNameSet, delListFromNameSet, isEmptyNameSet, foldNameSet, filterNameSet,
13 intersectsNameSet, intersectNameSet,
16 FreeVars, isEmptyFVs, emptyFVs, plusFVs, plusFV,
17 mkFVs, addOneFV, unitFV, delFV, delFVs
20 #include "HsVersions.h"
27 %************************************************************************
29 \subsection[Sets of names}
31 %************************************************************************
34 type NameSet = UniqSet Name
35 emptyNameSet :: NameSet
36 unitNameSet :: Name -> NameSet
37 addListToNameSet :: NameSet -> [Name] -> NameSet
38 addOneToNameSet :: NameSet -> Name -> NameSet
39 mkNameSet :: [Name] -> NameSet
40 unionNameSets :: NameSet -> NameSet -> NameSet
41 unionManyNameSets :: [NameSet] -> NameSet
42 minusNameSet :: NameSet -> NameSet -> NameSet
43 elemNameSet :: Name -> NameSet -> Bool
44 nameSetToList :: NameSet -> [Name]
45 isEmptyNameSet :: NameSet -> Bool
46 delFromNameSet :: NameSet -> Name -> NameSet
47 delListFromNameSet :: NameSet -> [Name] -> NameSet
48 foldNameSet :: (Name -> b -> b) -> b -> NameSet -> b
49 filterNameSet :: (Name -> Bool) -> NameSet -> NameSet
50 intersectNameSet :: NameSet -> NameSet -> NameSet
51 intersectsNameSet :: NameSet -> NameSet -> Bool -- True if non-empty intersection
52 -- (s1 `intersectsVarSet` s2) doesn't compute s2 if s1 is empty
54 isEmptyNameSet = isEmptyUniqSet
55 emptyNameSet = emptyUniqSet
56 unitNameSet = unitUniqSet
58 addListToNameSet = addListToUniqSet
59 addOneToNameSet = addOneToUniqSet
60 unionNameSets = unionUniqSets
61 unionManyNameSets = unionManyUniqSets
62 minusNameSet = minusUniqSet
63 elemNameSet = elementOfUniqSet
64 nameSetToList = uniqSetToList
65 delFromNameSet = delOneFromUniqSet
66 foldNameSet = foldUniqSet
67 filterNameSet = filterUniqSet
68 intersectNameSet = intersectUniqSets
70 delListFromNameSet set ns = foldl delFromNameSet set ns
72 intersectsNameSet s1 s2 = not (isEmptyNameSet (s1 `intersectNameSet` s2))
76 %************************************************************************
78 \subsection{Free variables}
80 %************************************************************************
82 These synonyms are useful when we are thinking of free variables
85 type FreeVars = NameSet
87 plusFV :: FreeVars -> FreeVars -> FreeVars
88 addOneFV :: FreeVars -> Name -> FreeVars
89 unitFV :: Name -> FreeVars
91 plusFVs :: [FreeVars] -> FreeVars
92 mkFVs :: [Name] -> FreeVars
93 delFV :: Name -> FreeVars -> FreeVars
94 delFVs :: [Name] -> FreeVars -> FreeVars
96 isEmptyFVs = isEmptyNameSet
97 emptyFVs = emptyNameSet
98 plusFVs = unionManyNameSets
99 plusFV = unionNameSets
101 addOneFV = addOneToNameSet
103 delFV n s = delFromNameSet s n
104 delFVs ns s = delListFromNameSet s ns