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
bx
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)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
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 | |
Reverse Dependencies | 1 direct, 0 indirect [details] |
Downloads | 1915 total (1 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] |