io-classes-labelled
Safe HaskellSafe-Inferred
LanguageGHC2021

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

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 (Either a b) 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 #