transformers-0.5.2.0: Concrete functor and monad transformers

Copyright | (c) Ross Paterson 2012
License | BSD-style (see the file LICENSE)
Maintainer | R.Paterson@city.ac.uk
Stability | experimental
Portability | portable
Safe Haskell | Safe
Language | Haskell98

Control.Monad.Signatures

Description

Signatures for monad operations that require specialized lifting. Each signature has a uniformity property that the lifting should satisfy.

Synopsis

- type CallCC m a b = ((a -> m b) -> m a) -> m a
- type Catch e m a = m a -> (e -> m a) -> m a
- type Listen w m a = m a -> m (a, w)
- type Pass w m a = m (a, w -> w) -> m a

# Documentation

type CallCC m a b = ((a -> m b) -> m a) -> m a #

Signature of the `callCC` operation, introduced in Control.Monad.Trans.Cont. Any lifting function `liftCallCC` should satisfy

-     lift (f k) = f' (lift . k) => lift (cf f) = liftCallCC cf f'

type Catch e m a = m a -> (e -> m a) -> m a #

Signature of the `catchE` operation, introduced in Control.Monad.Trans.Except. Any lifting function `liftCatch` should satisfy

-     lift (cf m f) = liftCatch (lift . cf) (lift f)

type Listen w m a = m a -> m (a, w) #

Signature of the `listen` operation, introduced in Control.Monad.Trans.Writer. Any lifting function `liftListen` should satisfy

-     lift . liftListen = liftListen . lift

type Pass w m a = m (a, w -> w) -> m a #

Signature of the `pass` operation, introduced in Control.Monad.Trans.Writer. Any lifting function `liftPass` should satisfy

-     lift . liftPass = liftPass . lift