CoreFVs

ghc-7.10.3: The GHC API

Safe Haskell | None
Language | Haskell2010

CoreFVs

Contents

- Free variables of expressions and binding groups
- Selective free variables of expressions
- Free variables of Rules, Vars and Ids
- Core syntax tree annotation with free variables

Description

A module concerned with finding the free variables of an expression.

Synopsis

- exprFreeVars :: CoreExpr -> VarSet
- exprFreeIds :: CoreExpr -> IdSet
- exprsFreeVars :: [CoreExpr] -> VarSet
- bindFreeVars :: CoreBind -> VarSet
- type InterestingVarFun = Var -> Bool
- exprSomeFreeVars :: InterestingVarFun -> CoreExpr -> VarSet
- exprsSomeFreeVars :: InterestingVarFun -> [CoreExpr] -> VarSet
- varTypeTyVars :: Var -> TyVarSet
- idUnfoldingVars :: Id -> VarSet
- idFreeVars :: Id -> VarSet
- idRuleAndUnfoldingVars :: Id -> VarSet
- idRuleVars :: Id -> VarSet
- idRuleRhsVars :: (Activation -> Bool) -> Id -> VarSet
- stableUnfoldingVars :: Unfolding -> Maybe VarSet
- ruleRhsFreeVars :: CoreRule -> VarSet
- ruleFreeVars :: CoreRule -> VarSet
- rulesFreeVars :: [CoreRule] -> VarSet
- ruleLhsOrphNames :: CoreRule -> NameSet
- ruleLhsFreeIds :: CoreRule -> VarSet
- vectsFreeVars :: [CoreVect] -> VarSet
- type CoreExprWithFVs = AnnExpr Id VarSet
- type CoreBindWithFVs = AnnBind Id VarSet
- freeVars :: CoreExpr -> CoreExprWithFVs
- freeVarsOf :: CoreExprWithFVs -> IdSet

# Free variables of expressions and binding groups

exprFreeVars :: CoreExpr -> VarSet

Find all locally-defined free Ids or type variables in an expression

exprFreeIds :: CoreExpr -> IdSet

Find all locally-defined free Ids in an expression

exprsFreeVars :: [CoreExpr] -> VarSet

Find all locally-defined free Ids or type variables in several expressions

bindFreeVars :: CoreBind -> VarSet

Find all locally defined free Ids in a binding group

# Selective free variables of expressions

type InterestingVarFun = Var -> Bool

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

exprSomeFreeVars

Arguments

:: InterestingVarFun | Says which `Var`s are interesting
-> CoreExpr |
-> VarSet |

Finds free variables in an expression selected by a predicate

exprsSomeFreeVars :: InterestingVarFun -> [CoreExpr] -> VarSet

Finds free variables in several expressions selected by a predicate

# Free variables of Rules, Vars and Ids

varTypeTyVars :: Var -> TyVarSet

idUnfoldingVars :: Id -> VarSet

idFreeVars :: Id -> VarSet

idRuleAndUnfoldingVars :: Id -> VarSet

idRuleVars :: Id -> VarSet

idRuleRhsVars :: (Activation -> Bool) -> Id -> VarSet

stableUnfoldingVars :: Unfolding -> Maybe VarSet

ruleRhsFreeVars :: CoreRule -> VarSet

Those variables free in the right hand side of a rule

ruleFreeVars :: CoreRule -> VarSet

Those variables free in the both the left right hand sides of a rule

rulesFreeVars :: [CoreRule] -> VarSet

Those variables free in the right hand side of several rules

ruleLhsOrphNames :: CoreRule -> NameSet

ruleLhsOrphNames is used when deciding whether a rule is an orphan. In particular, suppose that T is defined in this module; we want to avoid declaring that a rule like:

    fromIntegral T = fromIntegral_T

is an orphan. Of course it isn't, and declaring it an orphan would make the whole module an orphan module, which is bad.

ruleLhsFreeIds :: CoreRule -> VarSet

This finds all locally-defined free Ids on the left hand side of a rule

vectsFreeVars :: [CoreVect] -> VarSet

Free variables of a vectorisation declaration

# Core syntax tree annotation with free variables

type CoreExprWithFVs = AnnExpr Id VarSet

Every node in an expression annotated with its (non-global) free variables, both Ids and TyVars

type CoreBindWithFVs = AnnBind Id VarSet

Every node in a binding group annotated with its (non-global) free variables, both Ids and TyVars

freeVars :: CoreExpr -> CoreExprWithFVs

Annotate a `CoreExpr` with its (non-global) free type and value variables at every tree node

freeVarsOf :: CoreExprWithFVs -> IdSet

Inverse function to `freeVars`