GHC.Types.Var.Set
Var, Id and TyVar set types
type VarSet = UniqSet Var Source #
A non-deterministic Variable Set
A non-deterministic set of variables. See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM for explanation why it's not deterministic and why it matters. Use DVarSet if the set eventually gets converted into a list or folded over in a way where the order changes the generated code, for example when abstracting variables.
type TyCoVarSet = UniqSet TyCoVar Source #
Type or Coercion Variable Set
Manipulating these sets
emptyVarSet :: VarSet Source #
unitVarSet :: Var -> VarSet Source #
unionVarSets :: [VarSet] -> VarSet Source #
mapUnionVarSet :: (a -> VarSet) -> [a] -> VarSet Source #
map the function over the list, and union the results
isEmptyVarSet :: VarSet -> Bool Source #
sizeVarSet :: VarSet -> Int Source #
pluralVarSet :: VarSet -> SDoc Source #
Determines the pluralisation suffix appropriate for the length of a set in the same way that plural from Outputable does for lists.
Arguments
:: VarSet | The things to be pretty printed |
-> ([Var] -> SDoc) | The pretty printing function to use on the elements |
-> SDoc |
|
Pretty-print a non-deterministic set. The order of variables is non-deterministic and for pretty-printing that shouldn't be a problem. Having this function helps contain the non-determinism created with nonDetEltsUFM. Passing a list to the pretty-printing function allows the caller to decide on the order of Vars (eg. toposort them) without them having to use nonDetEltsUFM at the call site. This prevents from let-binding non-deterministically ordered lists and reusing them where determinism matters.
nonDetStrictFoldVarSet :: (Var -> a -> a) -> a -> VarSet -> a Source #
Deterministic Var set types
type DTyCoVarSet = UniqDSet TyCoVar Source #
Deterministic Type or Coercion Variable Set
Manipulating these sets
unitDVarSet :: Var -> DVarSet Source #
dVarSetElems :: DVarSet -> [Var] Source #
unionDVarSets :: [DVarSet] -> DVarSet Source #
mapUnionDVarSet :: (a -> DVarSet) -> [a] -> DVarSet Source #
Map the function over the list, and union the results
isEmptyDVarSet :: DVarSet -> Bool Source #
nonDetStrictFoldDVarSet :: (Var -> a -> a) -> a -> DVarSet -> a Source #
sizeDVarSet :: DVarSet -> Int Source #
seqDVarSet :: DVarSet -> () Source #
partitionDVarSet :: (Var -> Bool) -> DVarSet -> (DVarSet, DVarSet) Source #
Partition DVarSet according to the predicate given
dVarSetToVarSet :: DVarSet -> VarSet Source #
Convert a DVarSet to a VarSet by forgetting the order of insertion