resourcet-1.1.10: Deterministic allocation and freeing of scarce resources.

Safe HaskellSafe
LanguageHaskell98

Data.Acquire

Description

This was previously known as the Resource monad. However, that term is confusing next to the ResourceT transformer, so it has been renamed.

Synopsis

Documentation

data Acquire a Source #

A method for acquiring a scarce resource, providing the means of freeing it when no longer needed. This data type provides FunctorApplicativeMonad instances for composing different resources together. You can allocate these resources using either the bracket pattern (via with) or using ResourceT (via allocateAcquire).

This concept was originally introduced by Gabriel Gonzalez and described at: http://www.haskellforall.com/2013/06/the-resource-applicative.html. The implementation in this package is slightly different, due to taking a different approach to async exception safety.

Since 1.1.0

Instances

Monad Acquire Source # 

Methods

(>>=) :: Acquire a -> (a -> Acquire b) -> Acquire b #

(>>) :: Acquire a -> Acquire b -> Acquire b #

return :: a -> Acquire a #

fail :: String -> Acquire a #

Functor Acquire Source # 

Methods

fmap :: (a -> b) -> Acquire a -> Acquire b #

(<$) :: a -> Acquire b -> Acquire a #

Applicative Acquire Source # 

Methods

pure :: a -> Acquire a #

(<*>) :: Acquire (a -> b) -> Acquire a -> Acquire b #

(*>) :: Acquire a -> Acquire b -> Acquire b #

(<*) :: Acquire a -> Acquire b -> Acquire a #

MonadIO Acquire Source # 

Methods

liftIO :: IO a -> Acquire a #

MonadBase IO Acquire Source # 

Methods

liftBase :: IO α -> Acquire α #

with :: MonadBaseControl IO m => Acquire a -> (a -> m b) -> m b Source #

Allocate the given resource and provide it to the provided function. The resource will be freed as soon as the inner block is exited, whether normally or via an exception. This function is similar in function to bracket.

Since 1.1.0

withEx :: (MonadMask m, MonadIO m) => Acquire a -> (a -> m b) -> m b Source #

Same as with, but uses the MonadMask typeclass from exceptions instead of MonadBaseControl from exceptions.

Since 1.1.3

mkAcquire Source #

Arguments

:: IO a

acquire the resource

-> (a -> IO ())

free the resource

-> Acquire a 

Create an Acquire value using the given allocate and free functions.

Since 1.1.0

mkAcquireType Source #

Arguments

:: IO a

acquire the resource

-> (a -> ReleaseType -> IO ())

free the resource

-> Acquire a 

Same as mkAcquire, but the cleanup function will be informed of how cleanup was initiated. This allows you to distinguish, for example, between normal and exceptional exits.

Since 1.1.2

allocateAcquire :: MonadResource m => Acquire a -> m (ReleaseKey, a) Source #

Allocate a resource and register an action with the MonadResource to free the resource.

Since 1.1.0