-- 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.6 module Acquire -- | Acquire resources and use them by lifting IO into acquire. acquire :: Acquire a -> IO a -- | Execute an action, which uses a resource, having a resource provider. acquireAndUse :: Acquire env -> Use env err res -> IO (Either err res) -- | Run use on an acquired environment. useAcquired :: 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 env Acquire :: IO (env, IO ()) -> Acquire env -- | Construct Acquire by specifying a resource initializer and -- finalizer actions. startAndStop :: IO a -> (a -> IO ()) -> Acquire a -- | 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 Control.Monad.Reader.Class.MonadReader env (Acquire.Use env err) instance Control.Monad.Error.Class.MonadError err (Acquire.Use env err) instance Control.Monad.IO.Class.MonadIO (Acquire.Use env err) 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