-- 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)