Copyright | (C) 2012-2013 Fumiaki Kinoshita |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Fumiaki Kinoshita <[email protected]> |
Stability | experimental |
Portability | RankNTypes |
Safe Haskell | None |
Language | Haskell2010 |
Control.Monad.Operational.Mini
Description
Simple operational monad
- newtype Program t a = Program {
- unProgram :: forall r. (a -> r) -> (forall x. t x -> (x -> r) -> r) -> r
- interpret :: Monad m => (forall x. t x -> m x) -> Program t a -> m a
- cloneProgram :: (Monad m, Elevate t m) => Program t a -> m a
- data ReifiedProgram t a where
- Return :: a -> ReifiedProgram t a
- (:>>=) :: t a -> (a -> ReifiedProgram t b) -> ReifiedProgram t b
- fromReified :: ReifiedProgram t a -> Program t a
- module Control.Monad.Operational.Class
- module Control.Monad.Operational.TH
Documentation
interpret :: Monad m => (forall x. t x -> m x) -> Program t a -> m a Source
Interpret a Program
using the given transformation.
cloneProgram :: (Monad m, Elevate t m) => Program t a -> m a Source
data ReifiedProgram t a where Source
Reified version of Program
. It is useful for testing.
Constructors
Return :: a -> ReifiedProgram t a | |
(:>>=) :: t a -> (a -> ReifiedProgram t b) -> ReifiedProgram t b infixl 1 |
Instances
Monad (ReifiedProgram t) | |
Functor (ReifiedProgram t) | |
Applicative (ReifiedProgram t) | |
Tower (ReifiedProgram t) | |
type Floors (ReifiedProgram t) = (:>) (* -> *) t ((:>) (* -> *) (Program t) ((:>) (* -> *) Identity (Empty (* -> *)))) |
fromReified :: ReifiedProgram t a -> Program t a Source
module Control.Monad.Operational.TH