Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
UnliftIO.Resource
Contents
Description
Unlifted Control.Monad.Trans.Resource.
Since: 1.1.10
Synopsis
- runResourceT :: MonadUnliftIO m => ResourceT m a -> m a
- liftResourceT :: MonadIO m => ResourceT IO a -> ResourceT m a
- allocateU :: (MonadUnliftIO m, MonadResource m) => m a -> (a -> m ()) -> m (ReleaseKey, a)
- data ResourceT m a
- data ReleaseKey
- class MonadIO m => MonadResource m
- register :: MonadResource m => IO () -> m ReleaseKey
- release :: MonadIO m => ReleaseKey -> m ()
- unprotect :: MonadIO m => ReleaseKey -> m (Maybe (IO ()))
- allocate :: MonadResource m => IO a -> (a -> IO ()) -> m (ReleaseKey, a)
UnliftIO variants
runResourceT :: MonadUnliftIO m => ResourceT m a -> m a Source #
Unlifted version of runResourceT
.
Since: 1.1.10
liftResourceT :: MonadIO m => ResourceT IO a -> ResourceT m a Source #
Lifted version of liftResourceT
.
Since: 1.1.10
allocateU :: (MonadUnliftIO m, MonadResource m) => m a -> (a -> m ()) -> m (ReleaseKey, a) Source #
Unlifted allocate
.
Since: 1.2.6
Reexports
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
MonadTrans ResourceT Source # | |
Defined in Control.Monad.Trans.Resource.Internal | |
MonadRWS r w s m => MonadRWS r w s (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal | |
MonadError e m => MonadError e (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal Methods throwError :: e -> ResourceT m a catchError :: ResourceT m a -> (e -> ResourceT m a) -> ResourceT m a | |
MonadReader r m => MonadReader r (ResourceT m) Source # | |
MonadState s m => MonadState s (ResourceT m) Source # | |
MonadWriter w m => MonadWriter w (ResourceT m) Source # | |
MonadFail m => MonadFail (ResourceT m) Source # | Since: 1.2.2 |
Defined in Control.Monad.Trans.Resource.Internal | |
MonadFix m => MonadFix (ResourceT m) Source # | Since: 1.1.8 |
Defined in Control.Monad.Trans.Resource.Internal | |
MonadIO m => MonadIO (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal | |
Alternative m => Alternative (ResourceT m) Source # | Since 1.1.5 |
Applicative m => Applicative (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal | |
Functor m => Functor (ResourceT m) Source # | |
Monad m => Monad (ResourceT m) Source # | |
MonadPlus m => MonadPlus (ResourceT m) Source # | Since 1.1.5 |
MonadCatch m => MonadCatch (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal | |
MonadMask m => MonadMask (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal Methods mask :: ((forall a. ResourceT m a -> ResourceT m a) -> ResourceT m b) -> ResourceT m b uninterruptibleMask :: ((forall a. ResourceT m a -> ResourceT m a) -> ResourceT m b) -> ResourceT m b generalBracket :: ResourceT m a -> (a -> ExitCase b -> ResourceT m c) -> (a -> ResourceT m b) -> ResourceT m (b, c) | |
MonadThrow m => MonadThrow (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal | |
MonadCont m => MonadCont (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal | |
PrimMonad m => PrimMonad (ResourceT m) Source # | |
MonadIO m => MonadResource (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal Methods liftResourceT :: ResourceT IO a -> ResourceT m a Source # | |
MonadUnliftIO m => MonadUnliftIO (ResourceT m) Source # | Since: 1.1.10 |
Defined in Control.Monad.Trans.Resource.Internal Methods withRunInIO :: ((forall a. ResourceT m a -> IO a) -> IO b) -> ResourceT m b | |
type PrimState (ResourceT m) Source # | |
Defined in Control.Monad.Trans.Resource.Internal type PrimState (ResourceT m) = PrimState m |
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
Instances
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
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