effectful-0.0.0.0: A simple, yet powerful extensible effects library.
Safe HaskellNone
LanguageHaskell2010

Effectful.Resource

Description

Resource management via MonadResource.

Synopsis

Documentation

data Resource Source #

Data tag for a resource effect.

runResource :: Eff (Resource ': es) a -> Eff es a Source #

Run the resource effect.

Registering and releasing resources

allocate #

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 registering the release action, but this properly handles masking of asynchronous exceptions.

Since 0.3.0

allocate_ #

Arguments

:: MonadResource m 
=> IO a

allocate

-> IO ()

free resource

-> m ReleaseKey 

Perform some allocation where the return value is not required, and automatically register a cleanup action.

allocate_ is to allocate as bracket_ is to bracket

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

Since: resourcet-1.2.4

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

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 () #

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 ())) #

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

Orphan instances

(IOE :> es, Resource :> es) => MonadResource (Eff es) Source # 
Instance details

Methods

liftResourceT :: ResourceT IO a -> Eff es a #