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

GHC.Core.FVs

Description

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

Synopsis

Free variables of expressions and binding groups

exprFreeVars :: CoreExpr -> VarSet Source #

Find all locally-defined free Ids or type variables in an expression returning a non-deterministic set.

exprsFreeVars :: [CoreExpr] -> VarSet Source #

Find all locally-defined free Ids or type variables in several expressions returning a non-deterministic set.

exprFreeVarsDSet :: CoreExpr -> DVarSet Source #

Find all locally-defined free Ids or type variables in an expression returning a deterministic set.

exprFreeVarsList :: CoreExpr -> [Var] Source #

Find all locally-defined free Ids or type variables in an expression returning a deterministically ordered list.

exprsFreeVarsList :: [CoreExpr] -> [Var] Source #

Find all locally-defined free Ids or type variables in several expressions returning a deterministically ordered list.

exprFreeIds :: CoreExpr -> IdSet Source #

Find all locally-defined free Ids in an expression

exprFreeIdsDSet :: CoreExpr -> DIdSet Source #

Find all locally-defined free Ids in an expression returning a deterministic set.

exprsFreeIdsDSet :: [CoreExpr] -> DIdSet Source #

Find all locally-defined free Ids in several expressions returning a deterministic set.

exprFreeIdsList :: CoreExpr -> [Id] Source #

Find all locally-defined free Ids in an expression returning a deterministically ordered list.

exprsFreeIdsList :: [CoreExpr] -> [Id] Source #

Find all locally-defined free Ids in several expressions returning a deterministically ordered list.

bindFreeVars :: CoreBind -> VarSet Source #

Find all locally defined free Ids in a binding group

Selective free variables of expressions

type InterestingVarFun = Var -> Bool Source #

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

exprSomeFreeVars Source #

Arguments

:: InterestingVarFun

Says which Exprs are interesting

-> CoreExpr 
-> VarSet 

Finds free variables in an expression selected by a predicate

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

Finds free variables in several expressions selected by a predicate

exprSomeFreeVarsList Source #

Arguments

:: InterestingVarFun

Says which Exprs are interesting

-> CoreExpr 
-> [Var] 

Finds free variables in an expression selected by a predicate returning a deterministically ordered list.

exprsSomeFreeVarsList :: InterestingVarFun -> [CoreExpr] -> [Var] Source #

Finds free variables in several expressions selected by a predicate returning a deterministically ordered list.

Free variables of Rules, Vars and Ids

ruleFreeVars :: CoreRule -> VarSet Source #

Those variables free in the both the left right hand sides of a rule returned as a non-deterministic set

rulesFreeVars :: [CoreRule] -> VarSet Source #

Those variables free in both the left right hand sides of several rules

rulesFreeVarsDSet :: [CoreRule] -> DVarSet Source #

Those variables free in the both the left right hand sides of rules returned as a deterministic set

mkRuleInfo :: [CoreRule] -> RuleInfo Source #

Make a RuleInfo containing a number of CoreRules, suitable for putting into an IdInfo

ruleLhsFreeIds :: CoreRule -> VarSet Source #

This finds all locally-defined free Ids on the left hand side of a rule and returns them as a non-deterministic set

ruleLhsFreeIdsList :: CoreRule -> [Var] Source #

This finds all locally-defined free Ids on the left hand side of a rule and returns them as a deterministically ordered list

ruleRhsFreeVars :: CoreRule -> VarSet Source #

Those variables free in the right hand side of a rule returned as a non-deterministic set

rulesRhsFreeIds :: [CoreRule] -> VarSet Source #

Those locally-defined free Ids in the right hand side of several rules returned as a non-deterministic set

Orphan names

exprsOrphNames :: [CoreExpr] -> NameSet Source #

Finds the free external names of several expressions: see exprOrphNames for details

orphNamesOfFamInst :: FamInst -> NameSet Source #

orphNamesOfAxiom collects the names of the concrete types and type constructors that make up the LHS of a type family instance, including the family name itself.

For instance, given `type family Foo a b`: `type instance Foo (F (G (H a))) b = ...` would yield [Foo,F,G,H]

Used in the implementation of ":info" in GHCi.

Core syntax tree annotation with free variables

type CoreExprWithFVs = AnnExpr Id FVAnn Source #

Every node in an expression annotated with its (non-global) free variables, both Ids and TyVars, and type. NB: see Note [The FVAnn invariant]

type CoreBindWithFVs = AnnBind Id FVAnn Source #

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

type CoreAltWithFVs = AnnAlt Id FVAnn Source #

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

freeVars :: CoreExpr -> CoreExprWithFVs Source #

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

freeVarsOfAnn :: FVAnn -> DIdSet Source #

Extract the vars reported in a FVAnn