|
|
|
|
|
|
Synopsis |
|
|
|
|
Names set type
|
|
type NameSet = UniqSet Name |
|
Manipulating these sets
|
|
emptyNameSet :: NameSet |
|
unitNameSet :: Name -> NameSet |
|
mkNameSet :: [Name] -> NameSet |
|
unionNameSets :: NameSet -> NameSet -> NameSet |
|
unionManyNameSets :: [NameSet] -> NameSet |
|
minusNameSet :: NameSet -> NameSet -> NameSet |
|
elemNameSet :: Name -> NameSet -> Bool |
|
nameSetToList :: NameSet -> [Name] |
|
addOneToNameSet :: NameSet -> Name -> NameSet |
|
addListToNameSet :: NameSet -> [Name] -> NameSet |
|
delFromNameSet :: NameSet -> Name -> NameSet |
|
delListFromNameSet :: NameSet -> [Name] -> NameSet |
|
isEmptyNameSet :: NameSet -> Bool |
|
foldNameSet :: (Name -> b -> b) -> b -> NameSet -> b |
|
filterNameSet :: (Name -> Bool) -> NameSet -> NameSet |
|
intersectsNameSet :: NameSet -> NameSet -> Bool |
True if there is a non-empty intersection.
s1 intersectsNameSet s2 doesn't compute s2 if s1 is empty
|
|
intersectNameSet :: NameSet -> NameSet -> NameSet |
|
Free variables
|
|
type FreeVars = NameSet |
|
Manipulating sets of free variables
|
|
isEmptyFVs :: NameSet -> Bool |
|
emptyFVs :: FreeVars |
|
plusFVs :: [FreeVars] -> FreeVars |
|
plusFV :: FreeVars -> FreeVars -> FreeVars |
|
mkFVs :: [Name] -> FreeVars |
|
addOneFV :: FreeVars -> Name -> FreeVars |
|
unitFV :: Name -> FreeVars |
|
delFV :: Name -> FreeVars -> FreeVars |
|
delFVs :: [Name] -> FreeVars -> FreeVars |
|
Defs and uses
|
|
type Defs = NameSet |
A set of names that are defined somewhere
|
|
type Uses = NameSet |
A set of names that are used somewhere
|
|
type DefUse = (Maybe Defs, Uses) |
(Just ds, us) => The use of any member of the ds
implies that all the us are used too.
Also, us may mention ds.
Nothing => Nothing is defined in this group, but
nevertheless all the uses are essential.
Used for instance declarations, for example
|
|
type DefUses = [DefUse] |
A number of DefUses in dependency order: earlier Defs scope over later Uses
|
|
Manipulating defs and uses
|
|
emptyDUs :: DefUses |
|
usesOnly :: Uses -> DefUses |
|
mkDUs :: [(Defs, Uses)] -> DefUses |
|
plusDU :: DefUses -> DefUses -> DefUses |
|
findUses :: DefUses -> Uses -> Uses |
Given some DefUses and some Uses, find all the uses, transitively.
The result is a superset of the input Uses; and includes things defined
in the input DefUses (but only if they are used)
|
|
duDefs :: DefUses -> Defs |
|
duUses :: DefUses -> Uses |
Just like allUses, but Defs are not eliminated from the Uses returned
|
|
allUses :: DefUses -> Uses |
Collect all Uses, regardless of whether the group is itself used,
but remove Defs on the way
|
|
Produced by Haddock version 2.3.0 |