| |||||||||||||
| |||||||||||||
| Synopsis | |||||||||||||
| |||||||||||||
| Documentation | |||||||||||||
| coreSimplify :: UniplateExpr a => a -> a | |||||||||||||
| coreSimplifyExpr :: CoreExpr -> CoreExpr | |||||||||||||
Simplify a single Core Expr. Performs NO inlining, guaranteed to run in same or better space and time. May increase code size. Bugs lurk here, with inadvertant free variable capture. Move to a proper free variable monad and a guarantee of uniqueness | |||||||||||||
| coreSimplifyCaseCon :: CoreExpr -> CoreExpr | |||||||||||||
| Apply the Case (CoreCon ..) rule This rule has a serious sharing bug (doh!) | |||||||||||||
| coreSimplifyCaseCase :: CoreExpr -> CoreExpr | |||||||||||||
| Apply the Case (Case ..) rule | |||||||||||||
| coreSimplifyCaseLet :: CoreExpr -> CoreExpr | |||||||||||||
| Apply the Case (Let ..) rule | |||||||||||||
| coreSimplifyExprUnique :: UniqueIdM m => CoreExpr -> m CoreExpr | |||||||||||||
Precondition: All variables must be unique The following patterns must not occur: CoreApp _ [] CoreLet [] _ CoreLam [] _ CorePos _ _ CoreCase on _ => on notElem {CoreCon _, CoreApp (CoreCon _) _, CoreLet _ _, CoreCase _ _} CoreApp x _ => x notElem {CoreApp _ _, CoreLet _ _, CoreCase _ _, CoreLam _ _} CoreLet bind _ => all (map snd bind) notElem {CoreLet _ _, CoreVar _} The following should be applied if possible (and not breaking sharing): CoreLet bind x => replaceFreeVars bind x CoreLet (CoreCase x alts) => CoreCase x (CoreLet inside each alt) | |||||||||||||
| coreSimplifyExprUniqueExt :: UniqueIdM m => ((CoreExpr -> m CoreExpr) -> CoreExpr -> m CoreExpr) -> CoreExpr -> m CoreExpr | |||||||||||||
Sismplify in an extensible manner. myfunc retransform You should invoke retransform on all constructors you create. | |||||||||||||
| Produced by Haddock version 0.8 |