| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
CLaSH.Rewrite.Types
Description
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
Constructors
| 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 |
Instances
data RewriteState Source
State of a rewriting session
Constructors
| RewriteState | |
Fields
| |
Instances
| Monad m => MonadState RewriteState (R m) | |
| Monad m => MonadUnique (RewriteMonad m) |
typeTranslator :: Lens' RewriteState (HashMap TyConName TyCon -> Type -> Maybe (Either String HWType)) Source
data DebugLevel Source
Debug Message Verbosity
Constructors
| 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 |
Instances
newtype RewriteEnv Source
Read-only environment of a rewriting session
Constructors
| RE | |
Fields | |
Instances
| Monad m => MonadReader RewriteEnv (R m) | |
| Monad m => MonadUnique (RewriteMonad m) |
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
Constructors
| R | |
Fields
| |
Instances
| Monad m => MonadReader RewriteEnv (R m) | |
| Monad m => MonadWriter Any (R m) | |
| Monad m => MonadState RewriteState (R m) | |
| Monad m => Monad (R m) | |
| Functor m => Functor (R m) | |
| (Monad m, Functor m) => Applicative (R m) | |
| Monad m => Fresh (R m) | |
| Monad m => MonadUnique (R m) |
type Transform m = [CoreContext] -> Term -> m Term Source
Monadic action that transforms a term given a certain context