ghc-9.4.0.20220721: The GHC API
Safe HaskellSafe-Inferred
LanguageHaskell2010

GHC.Utils.FV

Description

Utilities for efficiently and deterministically computing free variables.

Synopsis

Deterministic free vars computations

type FV = InterestingVarFun -> VarSet -> VarAcc -> VarAcc Source #

type InterestingVarFun = Var -> Bool Source #

Predicate on possible free variables: returns True iff the variable is interesting

Running the computations

fvVarList :: FV -> [Var] Source #

Run a free variable computation, returning a list of distinct free variables in deterministic order.

fvVarSet :: FV -> VarSet Source #

Run a free variable computation, returning a non-deterministic set of free variables. Don't use if the set will be later converted to a list and the order of that list will impact the generated code.

fvDVarSet :: FV -> DVarSet Source #

Run a free variable computation, returning a deterministic set of free variables. Note that this is just a wrapper around the version that returns a deterministic list. If you need a list you should use fvVarList.

Manipulating those computations

unitFV :: Id -> FV Source #

Add a variable - when free, to the returned free variables. Ignores duplicates and respects the filtering function.

emptyFV :: FV Source #

Return no free variables.

mkFVs :: [Var] -> FV Source #

Add multiple variables - when free, to the returned free variables. Ignores duplicates and respects the filtering function.

unionFV :: FV -> FV -> FV Source #

Union two free variable computations.

unionsFV :: [FV] -> FV Source #

Union many free variable computations.

delFV :: Var -> FV -> FV Source #

Mark the variable as not free by putting it in scope.

delFVs :: VarSet -> FV -> FV Source #

Mark many free variables as not free.

filterFV :: InterestingVarFun -> FV -> FV Source #

Filter a free variable computation.

mapUnionFV :: (a -> FV) -> [a] -> FV Source #

Map a free variable computation over a list and union the results.