|
Control.Monad.STM | Portability | non-portable (requires STM) | Stability | experimental | Maintainer | libraries@haskell.org |
|
|
|
Description |
Software Transactional Memory: a modular composable concurrency
abstraction. See
This module only defines the STM monad; you probably want to
import Control.Concurrent.STM (which exports Control.Monad.STM).
|
|
Synopsis |
|
|
|
Documentation |
|
|
A monad supporting atomic memory transactions.
|
|
|
|
Perform a series of STM actions atomically.
You cannot use atomically inside an unsafePerformIO or unsafeInterleaveIO.
Any attempt to do so will result in a runtime error. (Reason: allowing
this would effectively allow a transaction inside a transaction, depending
on exactly when the thunk is evaluated.)
However, see newTVarIO, which can be called inside unsafePerformIO,
and which allows top-level TVars to be allocated.
|
|
|
always is a variant of alwaysSucceeds in which the invariant is
expressed as an STM Bool action that must return True. Returning
False or raising an exception are both treated as invariant failures.
|
|
|
alwaysSucceeds adds a new invariant that must be true when passed
to alwaysSucceeds, at the end of the current transaction, and at
the end of every subsequent transaction. If it fails at any
of those points then the transaction violating it is aborted
and the exception raised by the invariant is propagated.
|
|
|
Retry execution of the current memory transaction because it has seen
values in TVars which mean that it should not continue (e.g. the TVars
represent a shared buffer that is now empty). The implementation may
block the thread until one of the TVars that it has read from has been
udpated. (GHC only)
|
|
|
Compose two alternative STM actions (GHC only). If the first action
completes without retrying then it forms the result of the orElse.
Otherwise, if the first action retries, then the second action is
tried in its place. If both actions retry then the orElse as a
whole retries.
|
|
|
|
|
Exception handling within STM actions.
|
|
Produced by Haddock version 2.6.1 |