Copyright | (c) Kimiyuki Onaka 2021 |
---|---|
License | Apache License 2.0 |
Maintainer | kimiyuki95@gmail.com |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Synopsis
- data RewriteRule m
- data RewriteEnvironment = RewriteEnvironment {
- typeEnv :: [(VarName, Type)]
- assertedHints :: [(VarName, AssertedHint)]
- makeRewriteRule :: Monad m => String -> (RewriteEnvironment -> Expr -> m (Maybe Expr)) -> RewriteRule m
- pureRewriteRule :: Monad m => String -> (RewriteEnvironment -> Expr -> Maybe Expr) -> RewriteRule m
- simpleRewriteRule :: Monad m => String -> (Expr -> Maybe Expr) -> RewriteRule m
- traceRewriteRule :: Monad m => RewriteRule m -> RewriteRule m
- emptyRewriteEnvironment :: RewriteEnvironment
- makeRewriteEnvironmentFromTypeEnv :: [(VarName, Type)] -> RewriteEnvironment
- applyRewriteRule :: MonadError Error m => RewriteRule m -> RewriteEnvironment -> Expr -> m (Maybe Expr)
- applyRewriteRuleToplevelExpr :: MonadError Error m => RewriteRule m -> RewriteEnvironment -> ToplevelExpr -> StateT Integer m (Maybe ToplevelExpr)
- applyRewriteRuleProgram :: MonadError Error m => RewriteRule m -> Program -> m (Maybe Program)
- applyRewriteRuleProgram' :: MonadError Error m => RewriteRule m -> Program -> m Program
Documentation
data RewriteRule m Source #
Instances
Monad m => Semigroup (RewriteRule m) Source # | |
Defined in Jikka.Core.Language.RewriteRules (<>) :: RewriteRule m -> RewriteRule m -> RewriteRule m # sconcat :: NonEmpty (RewriteRule m) -> RewriteRule m # stimes :: Integral b => b -> RewriteRule m -> RewriteRule m # | |
Monad m => Monoid (RewriteRule m) Source # | |
Defined in Jikka.Core.Language.RewriteRules mempty :: RewriteRule m # mappend :: RewriteRule m -> RewriteRule m -> RewriteRule m # mconcat :: [RewriteRule m] -> RewriteRule m # |
data RewriteEnvironment Source #
RewriteEnvironment | |
|
Instances
Eq RewriteEnvironment Source # | |
Defined in Jikka.Core.Language.RewriteRules (==) :: RewriteEnvironment -> RewriteEnvironment -> Bool # (/=) :: RewriteEnvironment -> RewriteEnvironment -> Bool # | |
Ord RewriteEnvironment Source # | |
Defined in Jikka.Core.Language.RewriteRules compare :: RewriteEnvironment -> RewriteEnvironment -> Ordering # (<) :: RewriteEnvironment -> RewriteEnvironment -> Bool # (<=) :: RewriteEnvironment -> RewriteEnvironment -> Bool # (>) :: RewriteEnvironment -> RewriteEnvironment -> Bool # (>=) :: RewriteEnvironment -> RewriteEnvironment -> Bool # max :: RewriteEnvironment -> RewriteEnvironment -> RewriteEnvironment # min :: RewriteEnvironment -> RewriteEnvironment -> RewriteEnvironment # | |
Show RewriteEnvironment Source # | |
Defined in Jikka.Core.Language.RewriteRules showsPrec :: Int -> RewriteEnvironment -> ShowS # show :: RewriteEnvironment -> String # showList :: [RewriteEnvironment] -> ShowS # |
Construct Rules
makeRewriteRule :: Monad m => String -> (RewriteEnvironment -> Expr -> m (Maybe Expr)) -> RewriteRule m Source #
pureRewriteRule :: Monad m => String -> (RewriteEnvironment -> Expr -> Maybe Expr) -> RewriteRule m Source #
simpleRewriteRule :: Monad m => String -> (Expr -> Maybe Expr) -> RewriteRule m Source #
traceRewriteRule :: Monad m => RewriteRule m -> RewriteRule m Source #
traceRewriteRule
prints logs when the RewriteRule
works.
Apply Rules
applyRewriteRule :: MonadError Error m => RewriteRule m -> RewriteEnvironment -> Expr -> m (Maybe Expr) Source #
applyRewriteRule
applies a given rule to a given expr.
This rewrites on all sub-exprs of the given expr, and repeats to rewrite while it is possible.
- This function is idempotent.
- This function doesn't terminate when a given rewrite rule doesn't terminate.
applyRewriteRuleToplevelExpr :: MonadError Error m => RewriteRule m -> RewriteEnvironment -> ToplevelExpr -> StateT Integer m (Maybe ToplevelExpr) Source #
applyRewriteRuleProgram :: MonadError Error m => RewriteRule m -> Program -> m (Maybe Program) Source #
applyRewriteRuleProgram' :: MonadError Error m => RewriteRule m -> Program -> m Program Source #