Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data Resource m a where
- Bracket :: m a -> (a -> m c) -> (a -> m b) -> Resource m b
- BracketOnError :: m a -> (a -> m c) -> (a -> m b) -> Resource m b
- bracket :: forall r a c a. Member Resource r => Sem r a -> (a -> Sem r c) -> (a -> Sem r a) -> Sem r a
- bracketOnError :: forall r a c a. Member Resource r => Sem r a -> (a -> Sem r c) -> (a -> Sem r a) -> Sem r a
- finally :: Member Resource r => Sem r a -> Sem r b -> Sem r a
- onException :: Member Resource r => Sem r a -> Sem r b -> Sem r a
- runResource :: forall r a. Sem (Resource ': r) a -> Sem r a
- runResourceInIO :: forall r a. Member (Lift IO) r => (forall x. Sem r x -> IO x) -> Sem (Resource ': r) a -> Sem r a
- runResourceBase :: forall r a. LastMember (Lift IO) r => Sem (Resource ': r) a -> Sem r a
Effect
data Resource m a where Source #
An effect capable of providing bracket
semantics. Interpreters for this
will successfully run the deallocation action even in the presence of other
short-circuiting effects.
Bracket :: m a -> (a -> m c) -> (a -> m b) -> Resource m b | |
BracketOnError :: m a -> (a -> m c) -> (a -> m b) -> Resource m b |
Instances
type DefiningModule Resource Source # | |
Defined in Polysemy.Resource |
Actions
bracket :: forall r a c a. Member Resource r => Sem r a -> (a -> Sem r c) -> (a -> Sem r a) -> Sem r a Source #
bracketOnError :: forall r a c a. Member Resource r => Sem r a -> (a -> Sem r c) -> (a -> Sem r a) -> Sem r a Source #
:: Member Resource r | |
=> Sem r a | computation to run first |
-> Sem r b | computation to run afterward (even if an exception was raised) |
-> Sem r a |
Like bracket
, but for the simple case of one computation to run
afterward.
Since: 0.4.0.0
:: Member Resource r | |
=> Sem r a | computation to run first |
-> Sem r b | computation to run afterward if an exception was raised |
-> Sem r a |
Like bracketOnError
, but for the simple case of one computation to run
afterward.
Since: 0.4.0.0
Interpretations
runResource :: forall r a. Sem (Resource ': r) a -> Sem r a Source #
Run a Resource
effect purely.
Since: 0.4.0.0
runResourceBase :: forall r a. LastMember (Lift IO) r => Sem (Resource ': r) a -> Sem r a Source #
A more flexible --- though less safe --- version of runResourceInIO
.
This function is capable of running Resource
effects anywhere within an
effect stack, without relying on an explicit function to lower it into IO
.
Notably, this means that State
effects will be consistent
in the presence of Resource
.
runResourceBase
is safe whenever you're concerned about exceptions thrown
by effects _already handled_ in your effect stack, or in IO
code run
directly inside of bracket
. It is not safe against exceptions thrown
explicitly at the main thread. If this is not safe enough for your use-case,
use runResourceInIO
instead.
This function creates a thread, and so should be compiled with -threaded
.
Since: 0.5.0.0