| Safe Haskell | Safe-Inferred |
|---|---|
| Language | GHC2021 |
Control.Concurrent.Class.Labelled
Description
Thin wrappers over io-classes that attach a label to the STM
primitive or thread they create.
The labels surface in io-sim traces and as GHC thread labels, which
makes deadlock and liveness diagnosis tractable. Applying them everywhere
a TVar/TMVar/TQueue/TBQueue is allocated or a thread is spawned
is a discipline worth keeping; these helpers make it the path of least
resistance.
Synopsis
- newLabelledTVar :: MonadLabelledSTM m => String -> a -> STM m (TVar m a)
- newLabelledTVarIO :: MonadLabelledSTM m => String -> a -> m (TVar m a)
- newLabelledEmptyTMVar :: MonadLabelledSTM m => String -> STM m (TMVar m a)
- newLabelledEmptyTMVarIO :: MonadLabelledSTM m => String -> m (TMVar m a)
- newLabelledTQueue :: MonadLabelledSTM m => String -> STM m (TQueue m a)
- newLabelledTQueueIO :: MonadLabelledSTM m => String -> m (TQueue m a)
- newLabelledTBQueue :: MonadLabelledSTM m => String -> Natural -> STM m (TBQueue m a)
- newLabelledTBQueueIO :: MonadLabelledSTM m => String -> Natural -> m (TBQueue m a)
- asyncLabelled :: MonadAsync m => String -> m a -> m (Async m a)
- raceLabelled :: MonadAsync m => (String, m a) -> (String, m b) -> m (Either a b)
- raceLabelled_ :: MonadAsync m => (String, m a) -> (String, m b) -> m ()
- withAsyncLabelled :: MonadAsync m => (String, m a) -> (Async m a -> m b) -> m b
- concurrentlyLabelled :: MonadAsync m => (String, m a) -> (String, m b) -> m (a, b)
- concurrentlyLabelled_ :: MonadAsync m => (String, m a) -> (String, m b) -> m ()
Labelling STM variables
newLabelledTVar :: MonadLabelledSTM m => String -> a -> STM m (TVar m a) Source #
newLabelledTVarIO :: MonadLabelledSTM m => String -> a -> m (TVar m a) Source #
newLabelledEmptyTMVar :: MonadLabelledSTM m => String -> STM m (TMVar m a) Source #
newLabelledEmptyTMVarIO :: MonadLabelledSTM m => String -> m (TMVar m a) Source #
newLabelledTQueue :: MonadLabelledSTM m => String -> STM m (TQueue m a) Source #
newLabelledTQueueIO :: MonadLabelledSTM m => String -> m (TQueue m a) Source #
newLabelledTBQueue :: MonadLabelledSTM m => String -> Natural -> STM m (TBQueue m a) Source #
newLabelledTBQueueIO :: MonadLabelledSTM m => String -> Natural -> m (TBQueue m a) Source #
Labelling threads
asyncLabelled :: MonadAsync m => String -> m a -> m (Async m a) Source #
raceLabelled_ :: MonadAsync m => (String, m a) -> (String, m b) -> m () Source #
withAsyncLabelled :: MonadAsync m => (String, m a) -> (Async m a -> m b) -> m b Source #
concurrentlyLabelled :: MonadAsync m => (String, m a) -> (String, m b) -> m (a, b) Source #
concurrentlyLabelled_ :: MonadAsync m => (String, m a) -> (String, m b) -> m () Source #