Portability | portable |
---|---|
Stability | stable |
Maintainer | sven.panne@aedion.de |
Safe Haskell | Safe-Inferred |
This is a purely internal module to compensate for differences between Haskell implementations.
Documentation
:: IO a | computation to run first ("acquire resource") |
-> (a -> IO b) | computation to run last ("release resource") |
-> (a -> IO c) | computation to run in-between |
-> IO c |
When you want to acquire a resource, do some work with it, and
then release the resource, it is a good idea to use bracket
,
because bracket
will install the necessary exception handler to
release the resource in the event that an exception is raised
during the computation. If an exception is raised, then bracket
will
re-raise the exception (after performing the release).
A common example is opening a file:
bracket (openFile "filename" ReadMode) (hClose) (\fileHandle -> do { ... })
The arguments to bracket
are in this order so that we can partially apply
it, e.g.:
withFile name mode = bracket (openFile name mode) hClose
bracket_ :: IO a -> IO b -> IO c -> IO c
A variant of bracket
where the return value from the first computation
is not required.
finallyRet :: IO a -> IO b -> IO (a, b)Source