| Copyright | (C) 2012-2016 University of Twente 2016 Myrtle Software Ltd 2017 Google Inc. 2021-2022 QBayLogic B.V. |
|---|---|
| License | BSD2 (see the file LICENSE) |
| Maintainer | QBayLogic B.V. <devops@qbaylogic.com> |
| Safe Haskell | None |
| Language | Haskell2010 |
Clash.Rewrite.Types
Description
Type and instance definitions for Rewrite modules
Synopsis
- data RewriteStep = RewriteStep {}
- data RewriteState extra = RewriteState {
- _transformCounter :: !Word
- _transformCounters :: HashMap Text Word
- _bindings :: !BindingMap
- _uniqSupply :: !Supply
- _curFun :: (Id, SrcSpan)
- _nameCounter :: !Int
- _globalHeap :: PrimHeap
- _workFreeBinders :: VarEnv Bool
- _extra :: !extra
- bindings :: forall extra f. Functor f => (BindingMap -> f BindingMap) -> RewriteState extra -> f (RewriteState extra)
- curFun :: forall extra f. Functor f => ((Id, SrcSpan) -> f (Id, SrcSpan)) -> RewriteState extra -> f (RewriteState extra)
- extra :: forall extra1 extra2 f. Functor f => (extra1 -> f extra2) -> RewriteState extra1 -> f (RewriteState extra2)
- globalHeap :: forall extra f. Functor f => (PrimHeap -> f PrimHeap) -> RewriteState extra -> f (RewriteState extra)
- nameCounter :: forall extra f. Functor f => (Int -> f Int) -> RewriteState extra -> f (RewriteState extra)
- transformCounter :: forall extra f. Functor f => (Word -> f Word) -> RewriteState extra -> f (RewriteState extra)
- transformCounters :: forall extra f. Functor f => (HashMap Text Word -> f (HashMap Text Word)) -> RewriteState extra -> f (RewriteState extra)
- uniqSupply :: forall extra f. Functor f => (Supply -> f Supply) -> RewriteState extra -> f (RewriteState extra)
- workFreeBinders :: forall extra f. Functor f => (VarEnv Bool -> f (VarEnv Bool)) -> RewriteState extra -> f (RewriteState extra)
- data RewriteEnv = RewriteEnv {
- _clashEnv :: ClashEnv
- _typeTranslator :: CustomReprs -> TyConMap -> Type -> State HWMap (Maybe (Either String FilteredHWType))
- _peEvaluator :: Evaluator
- _evaluator :: Evaluator
- _topEntities :: VarSet
- clashEnv :: Lens' RewriteEnv ClashEnv
- evaluator :: Lens' RewriteEnv Evaluator
- peEvaluator :: Lens' RewriteEnv Evaluator
- topEntities :: Lens' RewriteEnv VarSet
- typeTranslator :: Lens' RewriteEnv (CustomReprs -> TyConMap -> Type -> State HWMap (Maybe (Either String FilteredHWType)))
- debugOpts :: Getter RewriteEnv DebugOpts
- aggressiveXOpt :: Getter RewriteEnv Bool
- tcCache :: Getter RewriteEnv TyConMap
- tupleTcCache :: Getter RewriteEnv (IntMap TyConName)
- customReprs :: Getter RewriteEnv CustomReprs
- fuelLimit :: Getter RewriteEnv Word
- primitives :: Getter RewriteEnv CompiledPrimMap
- inlineLimit :: Getter RewriteEnv Int
- inlineFunctionLimit :: Getter RewriteEnv Word
- inlineConstantLimit :: Getter RewriteEnv Word
- inlineWFCacheLimit :: Getter RewriteEnv Word
- newInlineStrategy :: Getter RewriteEnv Bool
- specializationLimit :: Getter RewriteEnv Int
- normalizeUltra :: Getter RewriteEnv Bool
- newtype RewriteMonad extra a = R {
- unR :: RWST RewriteEnv Any (RewriteState extra) IO a
- runR :: RewriteMonad extra a -> RewriteEnv -> RewriteState extra -> IO (a, RewriteState extra, Any)
- censor :: (Any -> Any) -> RewriteMonad extra a -> RewriteMonad extra a
- data TransformContext = TransformContext {
- tfInScope :: !InScopeSet
- tfContext :: Context
- type Transform (m :: Type -> Type) = TransformContext -> Term -> m Term
- type Rewrite extra = Transform (RewriteMonad extra)
Documentation
data RewriteStep Source #
State used by the inspection mechanism for recording rewrite steps.
Constructors
| RewriteStep | |
Instances
data RewriteState extra Source #
State of a rewriting session
Constructors
| RewriteState | |
Fields
| |
Instances
| MonadState (RewriteState extra) (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods get :: RewriteMonad extra (RewriteState extra) Source # put :: RewriteState extra -> RewriteMonad extra () Source # state :: (RewriteState extra -> (a, RewriteState extra)) -> RewriteMonad extra a Source # | |
bindings :: forall extra f. Functor f => (BindingMap -> f BindingMap) -> RewriteState extra -> f (RewriteState extra) Source #
curFun :: forall extra f. Functor f => ((Id, SrcSpan) -> f (Id, SrcSpan)) -> RewriteState extra -> f (RewriteState extra) Source #
extra :: forall extra1 extra2 f. Functor f => (extra1 -> f extra2) -> RewriteState extra1 -> f (RewriteState extra2) Source #
globalHeap :: forall extra f. Functor f => (PrimHeap -> f PrimHeap) -> RewriteState extra -> f (RewriteState extra) Source #
nameCounter :: forall extra f. Functor f => (Int -> f Int) -> RewriteState extra -> f (RewriteState extra) Source #
transformCounter :: forall extra f. Functor f => (Word -> f Word) -> RewriteState extra -> f (RewriteState extra) Source #
transformCounters :: forall extra f. Functor f => (HashMap Text Word -> f (HashMap Text Word)) -> RewriteState extra -> f (RewriteState extra) Source #
uniqSupply :: forall extra f. Functor f => (Supply -> f Supply) -> RewriteState extra -> f (RewriteState extra) Source #
workFreeBinders :: forall extra f. Functor f => (VarEnv Bool -> f (VarEnv Bool)) -> RewriteState extra -> f (RewriteState extra) Source #
data RewriteEnv Source #
Read-only environment of a rewriting session
Constructors
| RewriteEnv | |
Fields
| |
Instances
| MonadReader RewriteEnv (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods ask :: RewriteMonad extra RewriteEnv Source # local :: (RewriteEnv -> RewriteEnv) -> RewriteMonad extra a -> RewriteMonad extra a Source # reader :: (RewriteEnv -> a) -> RewriteMonad extra a Source # | |
typeTranslator :: Lens' RewriteEnv (CustomReprs -> TyConMap -> Type -> State HWMap (Maybe (Either String FilteredHWType))) Source #
newtype RewriteMonad extra a Source #
Monad that keeps track how many transformations have been applied and can generate fresh variables and unique identifiers. In addition, it keeps track if a transformation/rewrite has been successfully applied.
Constructors
| R | |
Fields
| |
Instances
| MonadReader RewriteEnv (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods ask :: RewriteMonad extra RewriteEnv Source # local :: (RewriteEnv -> RewriteEnv) -> RewriteMonad extra a -> RewriteMonad extra a Source # reader :: (RewriteEnv -> a) -> RewriteMonad extra a Source # | |
| MonadWriter Any (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods writer :: (a, Any) -> RewriteMonad extra a Source # tell :: Any -> RewriteMonad extra () Source # listen :: RewriteMonad extra a -> RewriteMonad extra (a, Any) Source # pass :: RewriteMonad extra (a, Any -> Any) -> RewriteMonad extra a Source # | |
| MonadUnique (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods getUniqueM :: RewriteMonad extra Unique Source # | |
| Applicative (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods pure :: a -> RewriteMonad extra a Source # (<*>) :: RewriteMonad extra (a -> b) -> RewriteMonad extra a -> RewriteMonad extra b Source # liftA2 :: (a -> b -> c) -> RewriteMonad extra a -> RewriteMonad extra b -> RewriteMonad extra c Source # (*>) :: RewriteMonad extra a -> RewriteMonad extra b -> RewriteMonad extra b Source # (<*) :: RewriteMonad extra a -> RewriteMonad extra b -> RewriteMonad extra a Source # | |
| Functor (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods fmap :: (a -> b) -> RewriteMonad extra a -> RewriteMonad extra b Source # (<$) :: a -> RewriteMonad extra b -> RewriteMonad extra a Source # | |
| Monad (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods (>>=) :: RewriteMonad extra a -> (a -> RewriteMonad extra b) -> RewriteMonad extra b Source # (>>) :: RewriteMonad extra a -> RewriteMonad extra b -> RewriteMonad extra b Source # return :: a -> RewriteMonad extra a Source # | |
| MonadFix (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods mfix :: (a -> RewriteMonad extra a) -> RewriteMonad extra a Source # | |
| MonadState (RewriteState extra) (RewriteMonad extra) Source # | |
Defined in Clash.Rewrite.Types Methods get :: RewriteMonad extra (RewriteState extra) Source # put :: RewriteState extra -> RewriteMonad extra () Source # state :: (RewriteState extra -> (a, RewriteState extra)) -> RewriteMonad extra a Source # | |
runR :: RewriteMonad extra a -> RewriteEnv -> RewriteState extra -> IO (a, RewriteState extra, Any) Source #
Run the computation in the RewriteMonad
censor :: (Any -> Any) -> RewriteMonad extra a -> RewriteMonad extra a Source #
data TransformContext Source #
Constructors
| TransformContext | |
Fields
| |
type Transform (m :: Type -> Type) = TransformContext -> Term -> m Term Source #
Monadic action that transforms a term given a certain context
type Rewrite extra = Transform (RewriteMonad extra) Source #
A Transform action in the context of the RewriteMonad