- module Control.Monad
- class Sharing m where
- class Trans m a b where
- eval :: (Monad m, Trans m a b) => a -> m b
- data List m a
- nil :: Monad m => m (List m a)
- cons :: Monad m => m a -> m (List m a) -> m (List m a)
- isEmpty :: Monad m => m (List m a) -> m Bool
- first :: MonadPlus m => m (List m a) -> m a
- rest :: MonadPlus m => m (List m a) -> m (List m a)
Interface of monads that support explicit sharing.
Yields an action that returns the same results as the given | action but whose effects are only executed once. Especially, | when the resulting action is duplicated it returns the same | result at every occurrence.
Interface to transform nested monadic data types. The provided
trans is supposed to map the given function on every
| monadic argument. The result of
trans may be of the same type
| as the argument but can also be of a different type, e.g. to
| convert a value with nested monadic arguments to a corresponding
| value without.
|Monad m => Trans m Double Double|
|Monad m => Trans m Float Float|
|Monad m => Trans m Char Char|
|Monad m => Trans m Int Int|
|Monad m => Trans m Bool Bool|
|(Monad m, Trans m a a) => Trans m [m a] [a]|
An instance for lists with monadic elements that lifts all | monadic effects to the top level and yields a list with | non-monadic elements.
|(Monad m, Trans m a a) => Trans m [m a] [m a]|
An instance for lists with monadic elements.
|(Monad m, Trans m a b) => Trans m (List m a) [b]|
|(Monad m, Trans m a b) => Trans m (List m a) (List m b)|
We provide instances of the
Trans class for some predefined
Haskell types. For flat types the function
trans just returns its
argument which has no arguments to which the given function could
Lifts all monadic effects in nested monadic values to the top
| level. If
m is a monad for non-determinism and the argument a
| data structure with nested non-determinism then the result
| corresponds to the normal form of the argument.
Data type for lists where both the head and tail are monadic.
Yields the head of a monadic list. Relies on
| to provide a failing implementation of