ghc-8.2.2: The GHC API

Safe Haskell | None
Language | Haskell2010

CoreArity

Description

Arity and eta expansion

Synopsis

- manifestArity :: CoreExpr -> Arity
- joinRhsArity :: CoreExpr -> JoinArity
- exprArity :: CoreExpr -> Arity
- typeArity :: Type -> [OneShotInfo]
- exprEtaExpandArity :: DynFlags -> CoreExpr -> Arity
- findRhsArity :: DynFlags -> Id -> CoreExpr -> Arity -> Arity
- type CheapFun = CoreExpr -> Maybe Type -> Bool
- etaExpand :: Arity -> CoreExpr -> CoreExpr
- etaExpandToJoinPoint :: JoinArity -> CoreExpr -> ([CoreBndr], CoreExpr)
- etaExpandToJoinPointRule :: JoinArity -> CoreRule -> CoreRule
- exprBotStrictness_maybe :: CoreExpr -> Maybe (Arity, StrictSig)

# Documentation

manifestArity :: CoreExpr -> Arity #

manifestArity sees how many leading value lambdas there are, after looking through casts

joinRhsArity :: CoreExpr -> JoinArity #

exprArity :: CoreExpr -> Arity #

An approximate, fast, version of `exprEtaExpandArity`

typeArity :: Type -> [OneShotInfo] #

exprEtaExpandArity :: DynFlags -> CoreExpr -> Arity #

findRhsArity :: DynFlags -> Id -> CoreExpr -> Arity -> Arity #

The Arity returned is the number of value args the expression can be applied to without doing much work

type CheapFun = CoreExpr -> Maybe Type -> Bool #

etaExpand #

Arguments

:: Arity | Result should have this number of value args
-> CoreExpr | Expression to expand
-> CoreExpr |

`etaExpand n e` returns an expression with the same meaning as `e`, but with arity `n`.

Given:

    e' = etaExpand n e

We should have that:

    ty = exprType e = exprType e'

etaExpandToJoinPoint :: JoinArity -> CoreExpr -> ([CoreBndr], CoreExpr) #

Split an expression into the given number of binders and a body, eta-expanding if necessary. Counts value *and* type binders.

etaExpandToJoinPointRule :: JoinArity -> CoreRule -> CoreRule #

exprBotStrictness_maybe :: CoreExpr -> Maybe (Arity, StrictSig) #