-- 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