| Safe Haskell | None |
|---|
DDC.Core.Transform.Rewrite
Description
Apply rewrite rules.
- data RewriteRule a n = RewriteRule {
- ruleBinds :: [(BindMode, Bind n)]
- ruleConstraints :: [Type n]
- ruleLeft :: Exp a n
- ruleLeftHole :: Maybe (Exp a n)
- ruleRight :: Exp a n
- ruleWeakEff :: Maybe (Effect n)
- ruleWeakClo :: [Exp a n]
- ruleFreeVars :: [Bound n]
- rewriteModule :: (Show a, Show n, Ord n, Pretty n) => [NamedRewriteRule a n] -> Module a n -> Module a n
- rewriteX :: (Show a, Show n, Ord n, Pretty n) => [NamedRewriteRule a n] -> Exp a n -> TransformResult (Exp a n)
Documentation
data RewriteRule a n Source
A rewrite rule. For example:
RULE [r1 r2 r3 : %] (x : Int r1)
. addInt [:r1 r2 r3:] x (0 [r2] ()
= copyInt [:r1 r3:] x
Constructors
| RewriteRule | |
Fields
| |
Instances
| Reannotate RewriteRule | Allow the expressions and anything else with annotations to be reannotated |
| (Eq a, Eq n) => Eq (RewriteRule a n) | |
| (Show a, Show n) => Show (RewriteRule a n) | |
| (Pretty n, Eq n) => Pretty (RewriteRule a n) |
Arguments
| :: (Show a, Show n, Ord n, Pretty n) | |
| => [NamedRewriteRule a n] | Rewrite rule database. |
| -> Module a n | Rewrite in this module. |
| -> Module a n |
Apply rewrite rules to a module.
Arguments
| :: (Show a, Show n, Ord n, Pretty n) | |
| => [NamedRewriteRule a n] | Rewrite rules database. |
| -> Exp a n | Rewrite in this expression. |
| -> TransformResult (Exp a n) |
Perform rewrites top-down, repeatedly.