ghc-9.6.3: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.Utils.FV

Contents

- Deterministic free vars computations
- Running the computations
  - Manipulating those computations

Description

Utilities for efficiently and deterministically computing free variables.

Synopsis

- type FV = InterestingVarFun -> VarSet -> VarAcc -> VarAcc
- type InterestingVarFun = Var -> Bool
- fvVarList :: FV -> [Var]
- fvVarSet :: FV -> VarSet
- fvDVarSet :: FV -> DVarSet
- unitFV :: Id -> FV
- emptyFV :: FV
- mkFVs :: [Var] -> FV
- unionFV :: FV -> FV -> FV
- unionsFV :: [FV] -> FV
- delFV :: Var -> FV -> FV
- delFVs :: VarSet -> FV -> FV
- filterFV :: InterestingVarFun -> FV -> FV
- mapUnionFV :: (a -> FV) -> [a] -> FV

# 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.