Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Arity and eta expansion
Synopsis
- manifestArity :: CoreExpr -> Arity
- joinRhsArity :: CoreExpr -> JoinArity
- exprArity :: CoreExpr -> Arity
- typeArity :: Type -> [OneShotInfo]
- exprEtaExpandArity :: DynFlags -> CoreExpr -> ArityType
- findRhsArity :: DynFlags -> Id -> CoreExpr -> Arity -> ArityType
- etaExpand :: Arity -> CoreExpr -> CoreExpr
- etaExpandAT :: ArityType -> CoreExpr -> CoreExpr
- etaExpandToJoinPoint :: JoinArity -> CoreExpr -> ([CoreBndr], CoreExpr)
- etaExpandToJoinPointRule :: JoinArity -> CoreRule -> CoreRule
- exprBotStrictness_maybe :: CoreExpr -> Maybe (Arity, StrictSig)
- data ArityType
- = ATop [OneShotInfo]
- | ABot Arity
- expandableArityType :: ArityType -> Bool
- arityTypeArity :: ArityType -> Arity
- maxWithArity :: ArityType -> Arity -> ArityType
- isBotArityType :: ArityType -> Bool
- idArityType :: Id -> ArityType
Documentation
manifestArity :: CoreExpr -> Arity Source #
manifestArity sees how many leading value lambdas there are, after looking through casts
joinRhsArity :: CoreExpr -> JoinArity Source #
typeArity :: Type -> [OneShotInfo] Source #
etaExpand :: Arity -> CoreExpr -> CoreExpr Source #
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) Source #
Split an expression into the given number of binders and a body, eta-expanding if necessary. Counts value *and* type binders.
expandableArityType :: ArityType -> Bool Source #
arityTypeArity :: ArityType -> Arity Source #
isBotArityType :: ArityType -> Bool Source #
idArityType :: Id -> ArityType Source #