| Safe Haskell | None |
|---|
Control.Monad.Trans.Operational
- newtype ProgramT instr m a = ProgramT {}
- interpretT :: forall t m instr a. (MonadTrans t, Functor (t m), Monad (t m), Functor m, Monad m) => (forall n x. (Functor n, Monad n) => instr x -> t n x) -> ProgramT instr m a -> t m a
- interpretTM :: (MonadTrans t, Functor (t m), Monad (t m), Monad m) => (forall x. instr x -> t m x) -> ProgramT instr m a -> t m a
- interpretM :: (Functor m, Monad m) => (forall x. instr x -> m x) -> ProgramT instr m a -> m a
- data ProgramViewT instr m a where
- Return :: a -> ProgramViewT instr m a
- :>>= :: instr a -> (a -> ProgramT instr m b) -> ProgramViewT instr m b
- viewT :: Monad m => ProgramT instr m a -> m (ProgramViewT instr m a)
Documentation
newtype ProgramT instr m a Source
Instances
| Monad m => Operational instr (ProgramT instr m) | |
| MonadTrans (ProgramT instr) | |
| Monad m => Monad (ProgramT instr m) | |
| Monad m => Functor (ProgramT instr m) | |
| Monad m => Applicative (ProgramT instr m) |
Arguments
| :: forall t m instr a . (MonadTrans t, Functor (t m), Monad (t m), Functor m, Monad m) | |
| => (forall n x. (Functor n, Monad n) => instr x -> t n x) | interpret |
| -> ProgramT instr m a | |
| -> t m a |
Given an intepretation of instr x as actions over a given monad
transformer t (transforming over an arbitrary monad m),
interpret as a monad transformer ProgramT instrt. Read that
sentence and the type carefully: the instruction interpretation can
pick its choice of t but not m.
Arguments
| :: (MonadTrans t, Functor (t m), Monad (t m), Monad m) | |
| => (forall x. instr x -> t m x) | interpret |
| -> ProgramT instr m a | |
| -> t m a |
Given an intepretation of instr x as actions over a given
transformed monad t m, interpret as a
transformed monad ProgramT instrt m. Read that sentence and the type
carefully: the instruction interpretation can pick its choice of
both t and m.
interpretM :: (Functor m, Monad m) => (forall x. instr x -> m x) -> ProgramT instr m a -> m aSource
data ProgramViewT instr m a whereSource
Constructors
| Return :: a -> ProgramViewT instr m a | |
| :>>= :: instr a -> (a -> ProgramT instr m b) -> ProgramViewT instr m b |
viewT :: Monad m => ProgramT instr m a -> m (ProgramViewT instr m a)Source