transformers-0.6.1.2: Concrete functor and monad transformers
Copyright(c) Ross Paterson 2012
LicenseBSD-style (see the file LICENSE)
MaintainerR.Paterson@city.ac.uk
Stabilityexperimental
Portabilityportable
Safe HaskellSafe
LanguageHaskell2010

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 Source #

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'

This implies that on entry to the continuation any outer monad transformer effect inside callCC will have been rolled back.

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

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

lift (cf m h) = liftCatch cf (lift m) (lift . h)

This implies that on entry to the handler function any outer monad transformer effect inside catchE will have been rolled back.

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

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 Source #

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

lift . liftPass = liftPass . lift