| Copyright | (c) Kimiyuki Onaka 2021 | 
|---|---|
| License | Apache License 2.0 | 
| Maintainer | kimiyuki95@gmail.com | 
| Stability | experimental | 
| Portability | portable | 
| Safe Haskell | None | 
| Language | Haskell2010 | 
Jikka.Core.Language.RewriteRules
Contents
Description
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 Methods (<>) :: 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 Methods mempty :: RewriteRule m # mappend :: RewriteRule m -> RewriteRule m -> RewriteRule m # mconcat :: [RewriteRule m] -> RewriteRule m #  | |
data RewriteEnvironment Source #
Constructors
| RewriteEnvironment | |
Fields 
  | |
Instances
| Eq RewriteEnvironment Source # | |
Defined in Jikka.Core.Language.RewriteRules Methods (==) :: RewriteEnvironment -> RewriteEnvironment -> Bool # (/=) :: RewriteEnvironment -> RewriteEnvironment -> Bool #  | |
| Ord RewriteEnvironment Source # | |
Defined in Jikka.Core.Language.RewriteRules Methods 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 Methods 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 #