Safe Haskell | None |
---|---|
Language | Haskell2010 |
Type and instance definitions for Rewrite modules
- data CoreContext
- data RewriteState = RewriteState {}
- uniqSupply :: Lens' RewriteState Supply
- typeTranslator :: Lens' RewriteState (HashMap TyConName TyCon -> Type -> Maybe (Either String HWType))
- transformCounter :: Lens' RewriteState Int
- tcCache :: Lens' RewriteState (HashMap TyConName TyCon)
- evaluator :: Lens' RewriteState (HashMap TyConName TyCon -> Term -> Term)
- bindings :: Lens' RewriteState (HashMap TmName (Type, Term))
- data DebugLevel
- newtype RewriteEnv = RE {}
- dbgLevel :: Iso' RewriteEnv DebugLevel
- type RewriteSession m = ReaderT RewriteEnv (StateT RewriteState (FreshMT m))
- type RewriteMonad m = WriterT Any (RewriteSession m)
- newtype R m a = R {
- runR :: RewriteMonad m a
- type Transform m = [CoreContext] -> Term -> m Term
- type Rewrite m = Transform (R m)
Documentation
data CoreContext Source
Context in which a term appears
AppFun | Function position of an application |
AppArg | Argument position of an application |
TyAppC | Function position of a type application |
LetBinding [Id] | RHS of a Let-binder with the sibling LHS' |
LetBody [Id] | Body of a Let-binding with the bound LHS' |
LamBody Id | Body of a lambda-term with the abstracted variable |
TyLamBody TyVar | Body of a TyLambda-term with the abstracted type-variable |
CaseAlt [Id] | RHS of a case-alternative with the variables bound by the pattern on the LHS |
CaseScrut | Subject of a case-decomposition |
data RewriteState Source
State of a rewriting session
RewriteState | |
|
Monad m => MonadState RewriteState (R m) Source | |
Monad m => MonadUnique (RewriteMonad m) Source |
typeTranslator :: Lens' RewriteState (HashMap TyConName TyCon -> Type -> Maybe (Either String HWType)) Source
data DebugLevel Source
Debug Message Verbosity
DebugNone | Don't show debug messages |
DebugFinal | Show completely normalized expressions |
DebugName | Names of applied transformations |
DebugApplied | Show sub-expressions after a successful rewrite |
DebugAll | Show all sub-expressions on which a rewrite is attempted |
newtype RewriteEnv Source
Read-only environment of a rewriting session
Monad m => MonadReader RewriteEnv (R m) Source | |
Monad m => MonadUnique (RewriteMonad m) Source |
type RewriteSession m = ReaderT RewriteEnv (StateT RewriteState (FreshMT m)) Source
Monad that keeps track how many transformations have been applied and can generate fresh variables and unique identifiers
type RewriteMonad m = WriterT Any (RewriteSession m) Source
Monad that can do the same as RewriteSession
and in addition keeps track
if a transformation/rewrite has been successfully applied.
MTL convenience wrapper around RewriteMonad
R | |
|
Monad m => MonadState RewriteState (R m) Source | |
Monad m => MonadReader RewriteEnv (R m) Source | |
Monad m => MonadWriter Any (R m) Source | |
Monad m => Monad (R m) Source | |
Functor m => Functor (R m) Source | |
Monad m => Applicative (R m) Source | |
Monad m => Fresh (R m) Source | |
Monad m => MonadUnique (R m) Source |
type Transform m = [CoreContext] -> Term -> m Term Source
Monadic action that transforms a term given a certain context