resourcet-1.2.6: Deterministic allocation and freeing of scarce resources.
Safe Haskell None
Language Haskell2010

UnliftIO.Resource

Description

Unlifted Control.Monad.Trans.Resource .

Since: 1.1.10

Synopsis

UnliftIO variants

runResourceT :: MonadUnliftIO m => ResourceT m a -> m a Source #

Unlifted version of runResourceT .

Since: 1.1.10

allocateU :: ( MonadUnliftIO m, MonadResource m) => m a -> (a -> m ()) -> m ( ReleaseKey , a) Source #

Unlifted allocate .

Since: 1.2.6

Reexports

data ResourceT m a Source #

The Resource transformer. This transformer keeps track of all registered actions, and calls them upon exit (via runResourceT ). Actions may be registered via register , or resources may be allocated atomically via allocate . allocate corresponds closely to bracket .

Releasing may be performed before exit via the release function. This is a highly recommended optimization, as it will ensure that scarce resources are freed early. Note that calling release will deregister the action, so that a release action will only ever be called once.

Since 0.3.0

Instances

Instances details
MonadTrans ResourceT Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadRWS r w s m => MonadRWS r w s ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadWriter w m => MonadWriter w ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadState s m => MonadState s ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadReader r m => MonadReader r ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadError e m => MonadError e ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

Monad m => Monad ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

Functor m => Functor ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadFix m => MonadFix ( ResourceT m) Source #

Since: 1.1.8

Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadFail m => MonadFail ( ResourceT m) Source #

Since: 1.2.2

Instance details

Defined in Control.Monad.Trans.Resource.Internal

Applicative m => Applicative ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadIO m => MonadIO ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

Alternative m => Alternative ( ResourceT m) Source #

Since 1.1.5

Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadPlus m => MonadPlus ( ResourceT m) Source #

Since 1.1.5

Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadThrow m => MonadThrow ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadCatch m => MonadCatch ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadMask m => MonadMask ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadCont m => MonadCont ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

PrimMonad m => PrimMonad ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

Associated Types

type PrimState ( ResourceT m) Source #

MonadUnliftIO m => MonadUnliftIO ( ResourceT m) Source #

Since: 1.1.10

Instance details

Defined in Control.Monad.Trans.Resource.Internal

Methods

withRunInIO :: (( forall a. ResourceT m a -> IO a) -> IO b) -> ResourceT m b Source #

MonadIO m => MonadResource ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

type PrimState ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

data ReleaseKey Source #

A lookup key for a specific release action. This value is returned by register and allocate , and is passed to release .

Since 0.3.0

class MonadIO m => MonadResource m Source #

A Monad which allows for safe resource allocation. In theory, any monad transformer stack which includes a ResourceT can be an instance of MonadResource .

Note: runResourceT has a requirement for a MonadUnliftIO m monad, which allows control operations to be lifted. A MonadResource does not have this requirement. This means that transformers such as ContT can be an instance of MonadResource . However, the ContT wrapper will need to be unwrapped before calling runResourceT .

Since 0.3.0

Minimal complete definition

liftResourceT

Instances

Instances details
MonadResource m => MonadResource ( MaybeT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadResource m => MonadResource ( ListT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadIO m => MonadResource ( ResourceT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadResource m => MonadResource ( ExceptT e m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadResource m => MonadResource ( IdentityT m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadResource m => MonadResource ( ReaderT r m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadResource m => MonadResource ( StateT s m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadResource m => MonadResource ( StateT s m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

( Monoid w, MonadResource m) => MonadResource ( WriterT w m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

( Monoid w, MonadResource m) => MonadResource ( WriterT w m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

MonadResource m => MonadResource ( ContT r m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

( Monoid w, MonadResource m) => MonadResource ( RWST r w s m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

( Monoid w, MonadResource m) => MonadResource ( RWST r w s m) Source #
Instance details

Defined in Control.Monad.Trans.Resource.Internal

register :: MonadResource m => IO () -> m ReleaseKey Source #

Register some action that will be called precisely once, either when runResourceT is called, or when the ReleaseKey is passed to release .

Since 0.3.0

release :: MonadIO m => ReleaseKey -> m () Source #

Call a release action early, and deregister it from the list of cleanup actions to be performed.

Since 0.3.0

unprotect :: MonadIO m => ReleaseKey -> m ( Maybe ( IO ())) Source #

Unprotect resource from cleanup actions; this allows you to send resource into another resourcet process and reregister it there. It returns a release action that should be run in order to clean resource or Nothing in case if resource is already freed.

Since 0.4.5

allocate Source #

Arguments

:: MonadResource m
=> IO a

allocate

-> (a -> IO ())

free resource

-> m ( ReleaseKey , a)

Perform some allocation, and automatically register a cleanup action.

This is almost identical to calling the allocation and then register ing the release action, but this properly handles masking of asynchronous exceptions.

Since 0.3.0