Name: monad-wrap Version: 0.1 Cabal-Version: >= 1.14 build-type: Simple License: BSD3 License-File: LICENSE Author: David Mazieres Stability: experimental Maintainer: http://www.scs.stanford.edu/~dm/addr/ Category: Control Synopsis: Wrap functions such as catch around different monads Extra-source-files: multigen/multigen.hs, multigen/MultiWrap-head.hs, multigen/MultiLift-head.hs, Examples/wrapExample.hs, Examples/multiliftExample.hs, Examples/multiwrapExample.hs Description: 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 @'finally'@ or @'bracket'@ to ensure cleanup is run regardless of any exceptions thrown by a computation such as @x :: 'ReaderT' MyConfig 'IO' b@. If @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 @'lift' (x ``finally`` cleanup)@. Instead, you must use the '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. Library Default-Language: Haskell2010 Build-Depends: base < 6, transformers Exposed-modules: Control.Monad.Wrap, Control.Monad.WrapIO, Control.Monad.WrapBase, Control.Monad.MultiWrap, Control.Monad.MultiLift Other-Extensions: MultiParamTypeClasses, FlexibleInstances, FunctionalDependencies, UndecidableInstances