Safe Haskell | None |
---|
Transformations of the Normalization process
- appProp :: NormRewrite
- bindNonRep :: NormRewrite
- liftNonRep :: NormRewrite
- caseLet :: NormRewrite
- caseCon :: NormRewrite
- caseCase :: NormRewrite
- inlineNonRep :: NormRewrite
- typeSpec :: NormRewrite
- nonRepSpec :: NormRewrite
- etaExpansionTL :: NormRewrite
- inlineClosedTerm :: String -> NormRewrite -> NormRewrite
- nonRepANF :: NormRewrite
- bindConstantVar :: NormRewrite
- constantSpec :: NormRewrite
- makeANF :: NormRewrite
- deadCode :: NormRewrite
- topLet :: NormRewrite
- inlineWrapper :: NormRewrite
- recToLetRec :: NormRewrite
Documentation
Propagate arguments of application inwards; except for Lam
where the
argument becomes let-bound.
bindNonRep :: NormRewriteSource
Inline non-recursive, non-representable let-bindings
liftNonRep :: NormRewriteSource
Lift recursive, non-representable let-bindings
Lift the let-bindings out of the subject of a Case-decomposition
Specialize a Case-decomposition (replace by the RHS of an alternative) if the subject is (an application of) a DataCon; or if there is only a single alternative that doesn't reference variables bound by the pattern.
Move a Case-decomposition from the subject of a Case-decomposition to the alternatives
inlineNonRep :: NormRewriteSource
Inline function with a non-representable result if it's the subject of a Case-decomposition
Specialize functions on their type
nonRepSpec :: NormRewriteSource
Specialize functions on their non-representable argument
etaExpansionTL :: NormRewriteSource
Eta-expand top-level lambda's (DON'T use in a traversal!)
inlineClosedTerm :: String -> NormRewrite -> NormRewriteSource
Inline nullary/closed functions
nonRepANF :: NormRewriteSource
Bring an application of a DataCon or Primitive in ANF, when the argument is is considered non-representable
bindConstantVar :: NormRewriteSource
Inline let-bindings when the RHS is either a local variable reference or is constant
constantSpec :: NormRewriteSource
Specialise functions on arguments which are constant
Turn an expression into a modified ANF-form. As opposed to standard ANF, constants do not become let-bound.
Remove unused let-bindings
Ensure that top-level lambda's eventually bind a let-expression of which the body is a variable-reference.
inlineWrapper :: NormRewriteSource
Inline functions which simply "wrap" another function
recToLetRec :: NormRewriteSource
Turn a normalized recursive function, where the recursive calls only pass along the unchanged original arguments, into let-recursive function. This means that all recursive calls are replaced by the same variable reference as found in the body of the top-level let-expression.