Safe Haskell | None |
---|
- 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
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) |
:: 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
.
:: (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
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