document uniformity conditions for lifting of operations
authorRoss Paterson <ross@soi.city.ac.uk>
Tue, 20 Jan 2015 18:51:47 +0000 (18:51 +0000)
committerRoss Paterson <ross@soi.city.ac.uk>
Tue, 20 Jan 2015 18:51:47 +0000 (18:51 +0000)
Control/Monad/Signatures.hs
Control/Monad/Trans/Class.hs

index 9ce2229..060551d 100644 (file)
@@ -17,16 +17,32 @@ module Control.Monad.Signatures (
 
 -- | 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 CallCC m a b = ((a -> m b) -> 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 Catch e m a = m a -> (e -> m a) -> m a
 
 -- | Signature of the @listen@ operation,
 -- introduced in "Control.Monad.Trans.Writer".
+-- Any lifting function @liftListen@ should satisfy
+--
+-- * @'lift' . liftListen = liftListen . 'lift'@
+--
 type Listen w m a = m a -> m (a, w)
 
 -- | Signature of the @pass@ operation,
 -- introduced in "Control.Monad.Trans.Writer".
+-- Any lifting function @liftPass@ should satisfy
+--
+-- * @'lift' . liftPass = liftPass . 'lift'@
+--
 type Pass w m a =  m (a, w -> w) -> m a
index 2ef153d..cb5fcd0 100644 (file)
@@ -79,7 +79,8 @@ Each of the monad transformers introduces relevant operations.
 In a sequence of monad transformers, most of these operations.can be
 lifted through other transformers using 'lift' or the @map@/XXX/@T@
 combinator, but a few with more complex type signatures require
-specialized lifting combinators, called @lift@/Op/.
+specialized lifting combinators, called @lift@/Op/
+(see "Control.Monad.Signatures").
 -}
 
 {- $strict