transformers-0.4.1.0: Concrete functor and monad transformers

Portability | portable
Stability | experimental
Maintainer | ross@soi.city.ac.uk
Safe Haskell | Safe-Inferred

Control.Monad.Trans.Reader

Contents

- The Reader monad
- The ReaderT monad transformer
- Reader operations
- Lifting other operations

Description

Declaration of the `ReaderT` monad transformer, which adds a static environment to a given monad.

If the computation is to modify the stored information, use Control.Monad.Trans.State instead.

Synopsis

- type Reader r = ReaderT r Identity
- reader :: Monad m => (r -> a) -> ReaderT r m a
- runReader :: Reader r a -> r -> a
- mapReader :: (a -> b) -> Reader r a -> Reader r b
- withReader :: (r' -> r) -> Reader r a -> Reader r' a
- newtype ReaderT r m a = ReaderT {
  - runReaderT :: r -> m a
  }
- mapReaderT :: (m a -> n b) -> ReaderT r m a -> ReaderT r n b
- withReaderT :: (r' -> r) -> ReaderT r m a -> ReaderT r' m a
- ask :: Monad m => ReaderT r m r
- local :: Monad m => (r -> r) -> ReaderT r m a -> ReaderT r m a
- asks :: Monad m => (r -> a) -> ReaderT r m a
- liftCallCC :: CallCC m a b -> CallCC (ReaderT r m) a b
- liftCatch :: Catch e m a -> Catch e (ReaderT r m) a

# The Reader monad

type Reader r = ReaderT r Identity

The parameterizable reader monad.

Computations are functions of a shared environment.

The `return` function ignores the environment, while `>>=` passes the inherited environment to both subcomputations.

reader :: Monad m => (r -> a) -> ReaderT r m a

Constructor for computations in the reader monad (equivalent to `asks`).

runReader

Arguments

:: Reader r a | A `Reader` to run.
-> r | An initial environment.
-> a |

Runs a `Reader` and extracts the final value from it. (The inverse of `reader`.)

mapReader :: (a -> b) -> Reader r a -> Reader r b

Transform the value returned by a `Reader`.

-     runReader (mapReader f m) = f . runReader m

withReader

Arguments

:: (r' -> r) | The function to modify the environment.
-> Reader r a | Computation to run in the modified environment.
-> Reader r' a |

Execute a computation in a modified environment (a specialization of `withReaderT`).

-     runReader (withReader f m) = runReader m . f

# The ReaderT monad transformer

newtype ReaderT r m a

The reader monad transformer, which adds a read-only environment to the given monad.

The `return` function ignores the environment, while `>>=` passes the inherited environment to both subcomputations.

Constructors

ReaderT |

Fields

runReaderT :: r -> m a

Instances

MonadTrans (ReaderT r) |
Monad m => Monad (ReaderT r m) |
Functor m => Functor (ReaderT r m) |
MonadFix m => MonadFix (ReaderT r m) |
MonadPlus m => MonadPlus (ReaderT r m) |
Applicative m => Applicative (ReaderT r m) |
Alternative m => Alternative (ReaderT r m) |
MonadIO m => MonadIO (ReaderT r m) |

mapReaderT :: (m a -> n b) -> ReaderT r m a -> ReaderT r n b

Transform the computation inside a `ReaderT`.

-     runReaderT (mapReaderT f m) = f . runReaderT m

withReaderT

Arguments

:: (r' -> r) | The function to modify the environment.
-> ReaderT r m a | Computation to run in the modified environment.
-> ReaderT r' m a |

Execute a computation in a modified environment (a more general version of `local`).

-     runReaderT (withReaderT f m) = runReaderT m . f

# Reader operations

ask :: Monad m => ReaderT r m r

Fetch the value of the environment.

local

Arguments

:: Monad m |
=> (r -> r) | The function to modify the environment.
-> ReaderT r m a | Computation to run in the modified environment.
-> ReaderT r m a |

Execute a computation in a modified environment (a specialization of `withReaderT`).

-     runReaderT (local f m) = runReaderT m . f

asks

Arguments

:: Monad m |
=> (r -> a) | The selector function to apply to the environment.
-> ReaderT r m a |

Retrieve a function of the current environment.

-     asks f = liftM f ask

# Lifting other operations

liftCallCC :: CallCC m a b -> CallCC (ReaderT r m) a b

Lift a `callCC` operation to the new monad.

liftCatch :: Catch e m a -> Catch e (ReaderT r m) a

Lift a `catchE` operation to the new monad.