minioperational-0.4.9: fast and simple operational monad

Copyright(C) 2013 Fumiaki Kinoshita
LicenseBSD-style (see the file LICENSE)
MaintainerFumiaki Kinoshita <fumiexcel@gmail.com>
Stabilityexperimental
PortabilityRankNTypes
Safe HaskellNone
LanguageHaskell2010

Control.Monad.Trans.Operational.Mini

Description

Simple operational monad transformer

Synopsis

Documentation

newtype ProgramT t m a Source

Constructors

ProgramT 

Fields

unProgramT :: forall r. (a -> r) -> (m r -> r) -> (forall x. t x -> (x -> r) -> r) -> r
 

Instances

MonadTrans (ProgramT t) 
Monad (ProgramT t m) 
Functor (ProgramT t m) 
Applicative (ProgramT t m) 
(Monad m, Tower m) => Tower (ProgramT t m) 
type Floors (ProgramT t m) = (:) (* -> *) t ((:) (* -> *) (ReifiedProgramT t m) ((:) (* -> *) (Program t) ((:) (* -> *) (ReifiedProgram t) (Floors1 m)))) 

unProgram :: Monad m => ProgramT t m a -> (a -> m r) -> (forall x. t x -> (x -> m r) -> m r) -> m r Source

cloneProgramT :: (Monad n, Elevate t n, Elevate m n) => ProgramT t m a -> n a Source

interpret :: Monad m => (forall x. t x -> m x) -> ProgramT t m a -> m a Source

Interpret a Program using the given transformation.

data ReifiedProgramT t m a where Source

Constructors

Return :: a -> ReifiedProgramT t m a 
(:>>=) :: t a -> (a -> ReifiedProgramT t m b) -> ReifiedProgramT t m b infix 1 
Lift :: m a -> (a -> ReifiedProgramT t m b) -> ReifiedProgramT t m b 

Instances

MonadTrans (ReifiedProgramT t) 
Monad m => Monad (ReifiedProgramT t m) 
Monad m => Functor (ReifiedProgramT t m) 
Monad m => Applicative (ReifiedProgramT t m) 
(Monad m, Tower m) => Tower (ReifiedProgramT t m) 
type Floors (ReifiedProgramT t m) = (:) (* -> *) t ((:) (* -> *) (ProgramT t m) ((:) (* -> *) (Program t) ((:) (* -> *) (ReifiedProgram t) (Floors1 m)))) 

transReifiedT :: Monad m => (forall x. m x -> n x) -> ReifiedProgramT t m a -> ReifiedProgramT t n a Source

hoistReifiedT :: Monad m => (forall x. t x -> s x) -> ReifiedProgramT t m a -> ReifiedProgramT s m a Source