-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Abstraction over management of resources -- -- An implementation of the abstraction suggested in a blog-post by -- Gabriel Gonzalez. @package acquire @version 0.3 module Acquire -- | Execute an action, which uses a resource, having a resource provider. acquireAndUse :: Acquire env -> Use env err res -> IO (Either err res) -- | Resource provider. Abstracts over resource acquisition and releasing. -- -- Composes well, allowing you to merge multiple providers into one. -- -- Implementation of -- http://www.haskellforall.com/2013/06/the-resource-applicative.html newtype Acquire resource Acquire :: IO (resource, IO ()) -> Acquire resource -- | Resource handler, which has a notion of pure errors. newtype Use env err res Use :: ReaderT env (ExceptT err IO) res -> Use env err res -- | Map the environment of a resource handler. mapEnv :: (b -> a) -> Use a err res -> Use b err res -- | Map the error of a resource handler. mapErr :: (a -> b) -> Use env a res -> Use env b res -- | Map both the environment and the error of a resource handler. mapEnvAndErr :: (envB -> envA) -> (errA -> errB) -> Use envA errA res -> Use envB errB res instance GHC.Base.Monoid err => GHC.Base.MonadPlus (Acquire.Use env err) instance GHC.Base.Monad (Acquire.Use env err) instance GHC.Base.Monoid err => GHC.Base.Alternative (Acquire.Use env err) instance GHC.Base.Applicative (Acquire.Use env err) instance GHC.Base.Functor (Acquire.Use env err) instance Data.Bifunctor.Bifunctor (Acquire.Use env) instance GHC.Base.Functor Acquire.Acquire instance GHC.Base.Applicative Acquire.Acquire instance GHC.Base.Monad Acquire.Acquire instance Control.Monad.IO.Class.MonadIO Acquire.Acquire