# monad-wrap: Wrap functions such as catch around different monads

This package allows you to invoke a function on one monadic
type passing it an argument of a different monadic type. The
canonical example is using a function such as

or
`finally`

to ensure cleanup is run regardless of any
exceptions thrown by a computation such as `bracket`

`x :: `

. If `ReaderT`

MyConfig `IO`

b`x`

uses the `ReaderT`

function `ask`

,
it cannot be re-written to run in the `IO`

monad, and hence
cannot be executed with a construction like

. Instead, you must use the `lift`

(x
``finally``

cleanup)`wrap`

method, provided by module Control.Monad.Wrap in this
package.

This package contains several other modules:
Control.Monad.WrapIO wraps an IO action through multiple
monad transformers. Control.Monad.WrapBase generalizes the
concept to other base monads besides IO.
Control.Monad.MultiWrap implements `mwrap`

, a method that
behaves like `wrap`

but allows wrapping through multiple
nested layers of monad transformer. The module
Control.Monad.MultiLift provides `mlift`

, a version of
`lift`

that similarly lifts through multiple nested monad
transformers.

Since this library was first released, an alternate approach
was introduced by the `monad-control`

package.
`monad-control`

is now the standard. However, this package,
`monad-wrap`

, stands as an example of accomplishing similar
goals with fewer language extensions and less complexity. In
particular, `monad-wrap`

does not use `RankNTypes`

or
`TypeFamilies`

, both required by `monad-control`

. Moreover,
`monad-wrap`

is much smaller--no `MonadWrap`

method requires
more than one line of code. Both `monad-wrap`

and
`monad-control`

require `UndecidableInstances`

, but
Control.Monad.Wrap itself does not require that extension,
only the other modules.

## Modules

[Index]

## Downloads

- monad-wrap-0.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)

Versions [RSS] | 0.0, 0.1 |
---|---|

Dependencies | base (<6), transformers [details] |

License | BSD-3-Clause |

Author | David Mazieres |

Maintainer | http://www.scs.stanford.edu/~dm/addr/ |

Category | Control |

Uploaded | by DavidMazieres at 2013-04-27T07:52:54Z |

Distributions | NixOS:0.1 |

Downloads | 1759 total (10 in the last 30 days) |

Rating | (no votes yet) [estimated by Bayesian average] |

Your Rating | |

Status | Docs uploaded by user Build status unknown [no reports yet] |