Control.Monad.Trans.Maybe

transformers-0.4.2.0: Concrete functor and monad transformers

Copyright | (c) 2007 Yitzak Gale, Eric Kidd
License | BSD-style (see the file LICENSE)
Maintainer | ross@soi.city.ac.uk
Stability | experimental
Portability | portable
Safe Haskell | Safe
Language | Haskell98

Control.Monad.Trans.Maybe

Contents

- The MaybeT monad transformer
- Conversion
- Lifting other operations

Description

The `MaybeT` monad transformer extends a monad with the ability to exit the computation without returning a value.

A sequence of actions produces a value only if all the actions in the sequence do. If one exits, the rest of the sequence is skipped and the composite action exits.

For a variant allowing a range of exception values, see Control.Monad.Trans.Except.

Synopsis

- newtype MaybeT m a = MaybeT {
  - runMaybeT :: m (Maybe a)
  }
- mapMaybeT :: (m (Maybe a) -> n (Maybe b)) -> MaybeT m a -> MaybeT n b
- maybeToExceptT :: Functor m => e -> MaybeT m a -> ExceptT e m a
- exceptToMaybeT :: Functor m => ExceptT e m a -> MaybeT m a
- liftCallCC :: CallCC m (Maybe a) (Maybe b) -> CallCC (MaybeT m) a b
- liftCatch :: Catch e m (Maybe a) -> Catch e (MaybeT m) a
- liftListen :: Monad m => Listen w m (Maybe a) -> Listen w (MaybeT m) a
- liftPass :: Monad m => Pass w m (Maybe a) -> Pass w (MaybeT m) a

# The MaybeT monad transformer

newtype MaybeT m a

The parameterizable maybe monad, obtained by composing an arbitrary monad with the `Maybe` monad.

Computations are actions that may produce a value or exit.

The `return` function yields a computation that produces that value, while `>>=` sequences two subcomputations, exiting if either computation does.

Constructors

MaybeT |
Fields runMaybeT :: m (Maybe a)

Instances

MonadTrans MaybeT |
Monad m => Monad (MaybeT m) |
Functor m => Functor (MaybeT m) |
MonadFix m => MonadFix (MaybeT m) |
(Functor m, Monad m) => Applicative (MaybeT m) |
Foldable f => Foldable (MaybeT f) |
Traversable f => Traversable (MaybeT f) |
(Functor m, Monad m) => Alternative (MaybeT m) |
Monad m => MonadPlus (MaybeT m) |
MonadIO m => MonadIO (MaybeT m) |
Show1 m => Show1 (MaybeT m) |
Read1 m => Read1 (MaybeT m) |
Ord1 m => Ord1 (MaybeT m) |
Eq1 m => Eq1 (MaybeT m) |
(Eq1 m, Eq a) => Eq (MaybeT m a) |
(Ord1 m, Ord a) => Ord (MaybeT m a) |
(Read1 m, Read a) => Read (MaybeT m a) |
(Show1 m, Show a) => Show (MaybeT m a) |

mapMaybeT :: (m (Maybe a) -> n (Maybe b)) -> MaybeT m a -> MaybeT n b

Transform the computation inside a `MaybeT`.

-     runMaybeT (mapMaybeT f m) = f (runMaybeT m)

# Conversion

maybeToExceptT :: Functor m => e -> MaybeT m a -> ExceptT e m a

Convert a `MaybeT` computation to `ExceptT`, with a default exception value.

exceptToMaybeT :: Functor m => ExceptT e m a -> MaybeT m a

Convert a `ExceptT` computation to `MaybeT`, discarding the value of any exception.

# Lifting other operations

liftCallCC :: CallCC m (Maybe a) (Maybe b) -> CallCC (MaybeT m) a b

Lift a `callCC` operation to the new monad.

liftCatch :: Catch e m (Maybe a) -> Catch e (MaybeT m) a

Lift a `catchE` operation to the new monad.

liftListen :: Monad m => Listen w m (Maybe a) -> Listen w (MaybeT m) a

Lift a `listen` operation to the new monad.

liftPass :: Monad m => Pass w m (Maybe a) -> Pass w (MaybeT m) a

Lift a `pass` operation to the new monad.