




Description 
Author : Ralf Laemmel, Joost Visser
Stability : experimental
Portability : portable
This module is part of StrategyLib, a library of functional strategy
combinators, including combinators for generic traversal. This module
provides nonstrategic functionality for running monads and unlifting
monad transformers. In a sense, this is dual to the return and lift
functionality of the Monad and MonadTrans classes.


Synopsis 

data MaybeAlg a b = MaybeAlg {}   data ErrorAlg e a b = ErrorAlg {}   data ListAlg a b = ListAlg {}   data StateAlg s a b = StateAlg {}   class MonadRun s m  m > s where    mrun :: (MonadRun s m, Monad m') => s a b > m a > m' b   class MonadUnTrans s t  t > s where    mplus' :: (Monad m, MonadUnTrans MaybeAlg t) => t m b > m b > m b   mswitch :: (Monad m, MonadUnTrans MaybeAlg t) => [t m b] > m b > m b   mayswitch :: Monad m => [MaybeT m b] > m b > m b   mchoice' :: (Monad m, MonadUnTrans MaybeAlg t) => (a > t m b) > (a > m b) > a > m b   mchoices :: (Monad m, MonadUnTrans MaybeAlg t, MonadPlus (t m)) => [a > t m b] > (a > m b) > a > m b   mswitch0 :: (Monad m, MonadUnTrans MaybeAlg t) => [t m b] > m b > m b   mswitch1 :: (Monad m, MonadUnTrans MaybeAlg t) => [t m b] > m b > m b   mswitch' :: (Monad m, MonadUnTrans MaybeAlg t, MonadPlus (t m)) => [t m b] > m b > m b 



Monad algebras


data MaybeAlg a b 
The algebra for the partiality effect of Maybe and MaybeT.
 Constructors  MaybeAlg   nothing :: b   just :: (a > b)  

 Instances  


data ErrorAlg e a b 
The algebra for the error effect of Either and ErrorT.
 Constructors  ErrorAlg   left :: (e > b)   right :: (a > b)  

 Instances  


data ListAlg a b 
The algebra for the nondeterminacy effect of '[]' and ListT.
 Constructors  ListAlg   nil :: b   cons :: (a > b > b)  

 Instances  


data StateAlg s a b 
The algebra for the state effect of State and StateT.
 Constructors  StateAlg   first :: s  initial state
 next :: ((a, s) > b)  state transformer


 Instances  


Running monads


class MonadRun s m  m > s where 
The class of monads for which a run function is defined that
executes the computation of the monad.
  Methods  run :: s a b > m a > b  The overloaded function run takes as first argument an algebra which
captures the ingredients necessary to run the particular monad at hand.
This algebra is parameterized with the domain and codomain of run.

  Instances  


mrun :: (MonadRun s m, Monad m') => s a b > m a > m' b 
Exchange one monad by another.
This function runs one monad, and puts its value in another. This is
basically a monadic version of the run function itself. Note that the two
monads are unrelated, so none of the effects of the incoming monad are
transferred to the result monad.


Unlifting monad transformers


class MonadUnTrans s t  t > s where 
Just as a base monad can be run to remove the monad, so can a transformed
monad be unlifted to remove the transformer and obtain the original monad.
  Methods  unlift :: Monad m => s a b > t m a > m b  The overloaded function unlift for monad transformers takes as first
argument an algebra just like the run function for base monads. For
each monad transformer, the same algebra is used as for the base monad
of which the transformer is the parameterized variant.

  Instances  


Monadic choice combinators that confine the partiality effect


Monadic choice


mplus' :: (Monad m, MonadUnTrans MaybeAlg t) => t m b > m b > m b 
Monadic choice combinator that confines the partiality effect to
the first argument. This is a variation on mplus which allows
the partiality effect to spread to both arguments and to the result.


mswitch 
:: (Monad m, MonadUnTrans MaybeAlg t)   => [t m b]  choice branches
 > m b  otherwise
 > m b  result
 Monadic choice combinator. Generalization of mplus' that takes a list
of choice arguments rather than a single one.



mayswitch :: Monad m => [MaybeT m b] > m b > m b 
Specialization of mswitch for MaybeT.


Monadic function choice


mchoice' :: (Monad m, MonadUnTrans MaybeAlg t) => (a > t m b) > (a > m b) > a > m b 
Monadic function choice combinator that confines the partiality effect
to the first argument. This is a variation on mchoice which
allows the partiality effect to spread to both arguments and to the
result.


mchoices :: (Monad m, MonadUnTrans MaybeAlg t, MonadPlus (t m)) => [a > t m b] > (a > m b) > a > m b 
Monadic function choice combinator. Generalization of mchoice' that
takes a list of choice arguments rather than a single one.


Implementation variants


mswitch0 :: (Monad m, MonadUnTrans MaybeAlg t) => [t m b] > m b > m b 
Implementation variant of mswitch in terms of foldr.


mswitch1 :: (Monad m, MonadUnTrans MaybeAlg t) => [t m b] > m b > m b 
Implementation variant of mswitch with mplus' expanded:


mswitch' :: (Monad m, MonadUnTrans MaybeAlg t, MonadPlus (t m)) => [t m b] > m b > m b 
Implementation variant of mswitch where the unlift is postponed
to the very end.


Produced by Haddock version 0.8 