-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | fast and simple operational monad
--
-- This package provides tiny implementation of operational monad.
@package minioperational
@version 0.4
-- | A class for operational monads
module Control.Monad.Operational.Class
class Monad m => (:!) t m | m -> t
singleton :: :! t m => t a -> m a
instance (t :! m, Error e) => t :! ErrorT e m
instance t :! m => t :! ListT m
instance t :! m => t :! IdentityT m
instance t :! m => t :! MaybeT m
instance (t :! m, Monoid w) => t :! RWST r w s m
instance (t :! m, Monoid w) => t :! RWST r w s m
instance (t :! m, Monoid w) => t :! WriterT w m
instance (t :! m, Monoid w) => t :! WriterT w m
instance t :! m => t :! ContT r m
instance t :! m => t :! StateT s m
instance t :! m => t :! StateT s m
instance t :! m => t :! ReaderT e m
-- | Simple operational monad transformer
module Control.Monad.Trans.Operational.Mini
newtype ProgramT t m a
ProgramT :: (forall r. (a -> m r) -> (forall x. t x -> (x -> m r) -> m r) -> m r) -> ProgramT t m a
unProgram :: ProgramT t m a -> forall r. (a -> m r) -> (forall x. t x -> (x -> m r) -> m r) -> m r
-- | Interpret a Program using the given transformation.
interpret :: Monad m => (forall x. t x -> m x) -> ProgramT t m a -> m a
data ReifiedProgramT t (m :: * -> *) a
Return :: a -> ReifiedProgramT t m a
(:>>=) :: t a -> (a -> ReifiedProgramT t m b) -> ReifiedProgramT t m b
Lift :: m a -> (a -> ReifiedProgramT t m b) -> ReifiedProgramT t m b
fromReifiedT :: Monad m => ReifiedProgramT t m a -> ProgramT t m a
instance MonadTrans (ReifiedProgramT t)
instance Monad m => t :! ReifiedProgramT t m
instance Monad m => Monad (ReifiedProgramT t m)
instance Monad m => Applicative (ReifiedProgramT t m)
instance Monad m => Functor (ReifiedProgramT t m)
instance MonadTrans (ProgramT t)
instance t :! ProgramT t m
instance Monad (ProgramT t m)
instance Applicative (ProgramT t m)
instance Functor (ProgramT t m)
module Control.Monad.Operational.TH
makeSingletons :: Name -> Q [Dec]
-- | Simple operational monad
module Control.Monad.Operational.Mini
-- | Program t is a Monad that represents a sequence of imperatives.
-- To construct imperatives, use singleton :: t a -> Program t
-- a.
newtype Program t a
Program :: (forall r. (a -> r) -> (forall x. t x -> (x -> r) -> r) -> r) -> Program t a
unProgram :: Program t a -> forall r. (a -> r) -> (forall x. t x -> (x -> r) -> r) -> r
-- | Interpret a Program using the given transformation.
interpret :: Monad m => (forall x. t x -> m x) -> Program t a -> m a
cloneProgram :: t :! m => Program t a -> m a
-- | Reified version of Program. It is useful for testing.
data ReifiedProgram t a
Return :: a -> ReifiedProgram t a
(:>>=) :: t a -> (a -> ReifiedProgram t b) -> ReifiedProgram t b
fromReified :: ReifiedProgram t a -> Program t a
instance t :! ReifiedProgram t
instance Monad (ReifiedProgram t)
instance Applicative (ReifiedProgram t)
instance Functor (ReifiedProgram t)
instance t :! Program t
instance Monad (Program t)
instance Applicative (Program t)
instance Functor (Program t)