| Copyright | (C) 2012-2013 Fumiaki Kinoshita |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Fumiaki Kinoshita <fumiexcel@gmail.com> |
| 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 ([] (* -> *)))) |
fromReified :: ReifiedProgram t a -> Program t a Source
module Control.Monad.Operational.TH