| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Control.Concurrent.Class.MonadSTM.Strict
Description
This module corresponds to STM in "stm" package
Synopsis
- class (Monad m, Monad (STM m)) => MonadSTM (m :: Type -> Type) where
- type family STM (m :: Type -> Type) = (stm :: Type -> Type) | stm -> m
- class MonadInspectSTM m => MonadTraceSTM (m :: Type -> Type) where
- traceTSem :: proxy m -> TSem m -> (Maybe Integer -> Integer -> InspectMonad m TraceValue) -> STM m ()
- traceTSemIO :: TSem m -> (Maybe Integer -> Integer -> InspectMonad m TraceValue) -> m ()
- data TraceValue where
- TraceValue :: forall tr. Typeable tr => {..} -> TraceValue
- pattern DontTrace :: TraceValue
- pattern TraceString :: String -> TraceValue
- pattern TraceDynamic :: () => Typeable tr => tr -> TraceValue
- class (MonadSTM m, Monad (InspectMonad m)) => MonadInspectSTM (m :: Type -> Type) where
- type InspectMonad (m :: Type -> Type) :: Type -> Type
- inspectTVar :: proxy m -> TVar m a -> InspectMonad m a
- inspectTMVar :: proxy m -> TMVar m a -> InspectMonad m (Maybe a)
- type family InspectMonad (m :: Type -> Type) :: Type -> Type
- class MonadSTM m => MonadLabelledSTM (m :: Type -> Type)
- data StrictTArray m i e
- type LazyTArray m = TArray m
- data StrictTBQueue m a
- type LazyTBQueue m = TBQueue m
- data StrictTChan m a
- type LazyTChan m = TChan m
- data StrictTMVar m a
- type LazyTMVar m = TMVar m
- data StrictTQueue m a
- type LazyTQueue m = TQueue m
- data StrictTVar m a
- type LazyTVar m = TVar m
- newTQueueIO :: MonadSTM m => m (StrictTQueue m a)
- newTBQueueIO :: MonadSTM m => Natural -> m (StrictTBQueue m a)
- newTMVarIO :: MonadSTM m => a -> m (StrictTMVar m a)
- throwSTM :: forall (m :: Type -> Type) e a. (MonadSTM m, MonadThrow (STM m), Exception e) => e -> STM m a
- newTVar :: MonadSTM m => a -> STM m (StrictTVar m a)
- newTVarIO :: MonadSTM m => a -> m (StrictTVar m a)
- readTVarIO :: MonadSTM m => StrictTVar m a -> m a
- readTVar :: MonadSTM m => StrictTVar m a -> STM m a
- writeTVar :: MonadSTM m => StrictTVar m a -> a -> STM m ()
- traceTVar :: MonadTraceSTM m => proxy m -> StrictTVar m a -> (Maybe a -> a -> InspectMonad m TraceValue) -> STM m ()
- traceTMVar :: MonadTraceSTM m => proxy m -> StrictTMVar m a -> (Maybe (Maybe a) -> Maybe a -> InspectMonad m TraceValue) -> STM m ()
- traceTQueue :: MonadTraceSTM m => proxy m -> StrictTQueue m a -> (Maybe [a] -> [a] -> InspectMonad m TraceValue) -> STM m ()
- traceTBQueue :: MonadTraceSTM m => proxy m -> StrictTBQueue m a -> (Maybe [a] -> [a] -> InspectMonad m TraceValue) -> STM m ()
- traceTVarIO :: MonadTraceSTM m => StrictTVar m a -> (Maybe a -> a -> InspectMonad m TraceValue) -> m ()
- traceTMVarIO :: MonadTraceSTM m => StrictTMVar m a -> (Maybe (Maybe a) -> Maybe a -> InspectMonad m TraceValue) -> m ()
- traceTQueueIO :: MonadTraceSTM m => StrictTQueue m a -> (Maybe [a] -> [a] -> InspectMonad m TraceValue) -> m ()
- traceTBQueueIO :: MonadTraceSTM m => StrictTBQueue m a -> (Maybe [a] -> [a] -> InspectMonad m TraceValue) -> m ()
- labelTVar :: MonadLabelledSTM m => StrictTVar m a -> String -> STM m ()
- labelTMVar :: MonadLabelledSTM m => StrictTMVar m a -> String -> STM m ()
- labelTQueue :: MonadLabelledSTM m => StrictTQueue m a -> String -> STM m ()
- labelTBQueue :: MonadLabelledSTM m => StrictTBQueue m a -> String -> STM m ()
- labelTVarIO :: MonadLabelledSTM m => StrictTVar m a -> String -> m ()
- labelTMVarIO :: MonadLabelledSTM m => StrictTMVar m a -> String -> m ()
- labelTQueueIO :: MonadLabelledSTM m => StrictTQueue m a -> String -> m ()
- labelTBQueueIO :: MonadLabelledSTM m => StrictTBQueue m a -> String -> m ()
- modifyTVar :: MonadSTM m => StrictTVar m a -> (a -> a) -> STM m ()
- stateTVar :: MonadSTM m => StrictTVar m s -> (s -> (a, s)) -> STM m a
- swapTVar :: MonadSTM m => StrictTVar m a -> a -> STM m a
- newTMVar :: MonadSTM m => a -> STM m (StrictTMVar m a)
- newEmptyTMVar :: MonadSTM m => STM m (StrictTMVar m a)
- takeTMVar :: MonadSTM m => StrictTMVar m a -> STM m a
- tryTakeTMVar :: MonadSTM m => StrictTMVar m a -> STM m (Maybe a)
- putTMVar :: MonadSTM m => StrictTMVar m a -> a -> STM m ()
- tryPutTMVar :: MonadSTM m => StrictTMVar m a -> a -> STM m Bool
- readTMVar :: MonadSTM m => StrictTMVar m a -> STM m a
- tryReadTMVar :: MonadSTM m => StrictTMVar m a -> STM m (Maybe a)
- swapTMVar :: MonadSTM m => StrictTMVar m a -> a -> STM m a
- writeTMVar :: MonadSTM m => StrictTMVar m a -> a -> STM m ()
- isEmptyTMVar :: MonadSTM m => StrictTMVar m a -> STM m Bool
- newTQueue :: MonadSTM m => STM m (StrictTQueue m a)
- readTQueue :: MonadSTM m => StrictTQueue m a -> STM m a
- tryReadTQueue :: MonadSTM m => StrictTQueue m a -> STM m (Maybe a)
- peekTQueue :: MonadSTM m => StrictTQueue m a -> STM m a
- tryPeekTQueue :: MonadSTM m => StrictTQueue m a -> STM m (Maybe a)
- flushTQueue :: MonadSTM m => StrictTQueue m a -> STM m [a]
- writeTQueue :: MonadSTM m => StrictTQueue m a -> a -> STM m ()
- isEmptyTQueue :: MonadSTM m => StrictTQueue m a -> STM m Bool
- unGetTQueue :: MonadSTM m => StrictTQueue m a -> a -> STM m ()
- newTBQueue :: MonadSTM m => Natural -> STM m (StrictTBQueue m a)
- readTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m a
- tryReadTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m (Maybe a)
- peekTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m a
- tryPeekTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m (Maybe a)
- flushTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m [a]
- writeTBQueue :: MonadSTM m => StrictTBQueue m a -> a -> STM m ()
- lengthTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Natural
- isEmptyTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Bool
- isFullTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Bool
- unGetTBQueue :: MonadSTM m => StrictTBQueue m a -> a -> STM m ()
- newTChan :: MonadSTM m => STM m (StrictTChan m a)
- newBroadcastTChan :: MonadSTM m => STM m (StrictTChan m a)
- dupTChan :: MonadSTM m => StrictTChan m a -> STM m (StrictTChan m a)
- cloneTChan :: MonadSTM m => StrictTChan m a -> STM m (StrictTChan m a)
- readTChan :: MonadSTM m => StrictTChan m a -> STM m a
- tryReadTChan :: MonadSTM m => StrictTChan m a -> STM m (Maybe a)
- peekTChan :: MonadSTM m => StrictTChan m a -> STM m a
- tryPeekTChan :: MonadSTM m => StrictTChan m a -> STM m (Maybe a)
- writeTChan :: MonadSTM m => StrictTChan m a -> a -> STM m ()
- unGetTChan :: MonadSTM m => StrictTChan m a -> a -> STM m ()
- isEmptyTChan :: MonadSTM m => StrictTChan m a -> STM m Bool
- newEmptyTMVarIO :: MonadSTM m => m (StrictTMVar m a)
- fromLazyTArray :: LazyTArray m i e -> StrictTArray m i e
- fromLazyTBQueue :: LazyTBQueue m a -> StrictTBQueue m a
- castStrictTBQueue :: LazyTBQueue m ~ LazyTBQueue n => StrictTBQueue m a -> StrictTBQueue n a
- fromLazyTChan :: LazyTChan m a -> StrictTChan m a
- castStrictTChan :: LazyTChan m ~ LazyTChan n => StrictTChan m a -> StrictTChan n a
- fromLazyTMVar :: LazyTMVar m a -> StrictTMVar m a
- castStrictTMVar :: LazyTMVar m ~ LazyTMVar n => StrictTMVar m a -> StrictTMVar n a
- fromLazyTQueue :: LazyTQueue m a -> StrictTQueue m a
- castStrictTQueue :: LazyTQueue m ~ LazyTQueue n => StrictTQueue m a -> StrictTQueue n a
- toLazyTVar :: StrictTVar m a -> LazyTVar m a
- fromLazyTVar :: LazyTVar m a -> StrictTVar m a
- castStrictTVar :: LazyTVar m ~ LazyTVar n => StrictTVar m a -> StrictTVar n a
Documentation
class (Monad m, Monad (STM m)) => MonadSTM (m :: Type -> Type) where #
The STM primitives parametrised by a monad m.
Minimal complete definition
atomically, newTVar, readTVar, writeTVar, retry, orElse, newTMVar, newEmptyTMVar, takeTMVar, tryTakeTMVar, putTMVar, tryPutTMVar, readTMVar, tryReadTMVar, swapTMVar, writeTMVar, isEmptyTMVar, newTQueue, readTQueue, tryReadTQueue, peekTQueue, tryPeekTQueue, flushTQueue, writeTQueue, isEmptyTQueue, unGetTQueue, newTBQueue, readTBQueue, tryReadTBQueue, peekTBQueue, tryPeekTBQueue, flushTBQueue, writeTBQueue, lengthTBQueue, isEmptyTBQueue, isFullTBQueue, unGetTBQueue, newTSem, waitTSem, signalTSem, signalTSemN, newTChan, newBroadcastTChan, dupTChan, cloneTChan, readTChan, tryReadTChan, peekTChan, tryPeekTChan, writeTChan, unGetTChan, isEmptyTChan
Methods
atomically :: HasCallStack => STM m a -> m a #
Atomically run an STM computation.
See atomically.
See retry.
orElse :: STM m a -> STM m a -> STM m a #
See orElse.
See check.
Instances
class MonadInspectSTM m => MonadTraceSTM (m :: Type -> Type) where #
MonadTraceSTM allows to trace values of stm variables when stm
transaction is committed. This allows to verify invariants when a variable
is committed.
Minimal complete definition
Methods
traceTSem :: proxy m -> TSem m -> (Maybe Integer -> Integer -> InspectMonad m TraceValue) -> STM m () #
traceTSemIO :: TSem m -> (Maybe Integer -> Integer -> InspectMonad m TraceValue) -> m () #
Instances
data TraceValue where #
A GADT which instructs how to trace the value. The traceDynamic will
use dynamic tracing, e.g. "Control.Monad.IOSim.traceM"; while traceString
will be traced with EventSay. The IOSims dynamic tracing allows to
recover the value from the simulation trace (see
"Control.Monad.IOSim.selectTraceEventsDynamic").
Constructors
| TraceValue | |
Fields
| |
Bundled Patterns
| pattern DontTrace :: TraceValue | Do not trace the value. |
| pattern TraceString :: String -> TraceValue | Use only string tracing. |
| pattern TraceDynamic :: () => Typeable tr => tr -> TraceValue | Use only a dynamic tracer. |
class (MonadSTM m, Monad (InspectMonad m)) => MonadInspectSTM (m :: Type -> Type) where #
This type class is indented for
'io-sim', where one might want
to access a TVar in the underlying ST monad.
Methods
inspectTVar :: proxy m -> TVar m a -> InspectMonad m a #
Return the value of a TVar as an InspectMonad computation.
inspectTVar is useful if the value of a TVar observed by traceTVar
contains other TVars.
inspectTMVar :: proxy m -> TMVar m a -> InspectMonad m (Maybe a) #
Return the value of a MonadSTM as an InspectMonad computation.
Instances
| MonadInspectSTM IO | |
Defined in Control.Monad.Class.MonadSTM.Internal Associated Types type InspectMonad IO :: Type -> Type # Methods inspectTVar :: proxy IO -> TVar IO a -> InspectMonad IO a # inspectTMVar :: proxy IO -> TMVar IO a -> InspectMonad IO (Maybe a) # | |
type family InspectMonad (m :: Type -> Type) :: Type -> Type #
Instances
| type InspectMonad IO | |
Defined in Control.Monad.Class.MonadSTM.Internal | |
class MonadSTM m => MonadLabelledSTM (m :: Type -> Type) #
Labelled TVars & friends.
The IO instances is no-op, the IOSim instance enhances simulation trace.
This is very useful when analysing low lever concurrency issues (e.g.
deadlocks, livelocks etc).
Minimal complete definition
Instances
| MonadLabelledSTM IO | noop instance |
Defined in Control.Monad.Class.MonadSTM.Internal Methods labelTVar :: TVar IO a -> String -> STM IO () # labelTMVar :: TMVar IO a -> String -> STM IO () # labelTQueue :: TQueue IO a -> String -> STM IO () # labelTBQueue :: TBQueue IO a -> String -> STM IO () # labelTArray :: (Ix i, Show i) => TArray IO i e -> String -> STM IO () # labelTSem :: TSem IO -> String -> STM IO () # labelTChan :: TChan IO a -> String -> STM IO () # labelTVarIO :: TVar IO a -> String -> IO () # labelTMVarIO :: TMVar IO a -> String -> IO () # labelTQueueIO :: TQueue IO a -> String -> IO () # labelTBQueueIO :: TBQueue IO a -> String -> IO () # labelTArrayIO :: (Ix i, Show i) => TArray IO i e -> String -> IO () # | |
data StrictTArray m i e Source #
Instances
| (MArray (TArray m) e stm, Monad stm) => MArray (StrictTArray m) e stm Source # | |
Defined in Control.Concurrent.Class.MonadSTM.Strict.TArray Methods getBounds :: Ix i => StrictTArray m i e -> stm (i, i) # getNumElements :: Ix i => StrictTArray m i e -> stm Int newArray :: Ix i => (i, i) -> e -> stm (StrictTArray m i e) # newArray_ :: Ix i => (i, i) -> stm (StrictTArray m i e) # unsafeNewArray_ :: Ix i => (i, i) -> stm (StrictTArray m i e) unsafeRead :: Ix i => StrictTArray m i e -> Int -> stm e unsafeWrite :: Ix i => StrictTArray m i e -> Int -> e -> stm () | |
type LazyTArray m = TArray m Source #
data StrictTBQueue m a Source #
type LazyTBQueue m = TBQueue m Source #
data StrictTChan m a Source #
data StrictTMVar m a Source #
TMVar that keeps its value in WHNF at all times
data StrictTQueue m a Source #
type LazyTQueue m = TQueue m Source #
data StrictTVar m a Source #
newTQueueIO :: MonadSTM m => m (StrictTQueue m a) Source #
newTBQueueIO :: MonadSTM m => Natural -> m (StrictTBQueue m a) Source #
newTMVarIO :: MonadSTM m => a -> m (StrictTMVar m a) Source #
throwSTM :: forall (m :: Type -> Type) e a. (MonadSTM m, MonadThrow (STM m), Exception e) => e -> STM m a #
throwIO specialised to stm monad.
newTVarIO :: MonadSTM m => a -> m (StrictTVar m a) Source #
readTVarIO :: MonadSTM m => StrictTVar m a -> m a Source #
traceTVar :: MonadTraceSTM m => proxy m -> StrictTVar m a -> (Maybe a -> a -> InspectMonad m TraceValue) -> STM m () Source #
traceTMVar :: MonadTraceSTM m => proxy m -> StrictTMVar m a -> (Maybe (Maybe a) -> Maybe a -> InspectMonad m TraceValue) -> STM m () Source #
traceTQueue :: MonadTraceSTM m => proxy m -> StrictTQueue m a -> (Maybe [a] -> [a] -> InspectMonad m TraceValue) -> STM m () Source #
traceTBQueue :: MonadTraceSTM m => proxy m -> StrictTBQueue m a -> (Maybe [a] -> [a] -> InspectMonad m TraceValue) -> STM m () Source #
traceTVarIO :: MonadTraceSTM m => StrictTVar m a -> (Maybe a -> a -> InspectMonad m TraceValue) -> m () Source #
traceTMVarIO :: MonadTraceSTM m => StrictTMVar m a -> (Maybe (Maybe a) -> Maybe a -> InspectMonad m TraceValue) -> m () Source #
traceTQueueIO :: MonadTraceSTM m => StrictTQueue m a -> (Maybe [a] -> [a] -> InspectMonad m TraceValue) -> m () Source #
traceTBQueueIO :: MonadTraceSTM m => StrictTBQueue m a -> (Maybe [a] -> [a] -> InspectMonad m TraceValue) -> m () Source #
labelTVar :: MonadLabelledSTM m => StrictTVar m a -> String -> STM m () Source #
labelTMVar :: MonadLabelledSTM m => StrictTMVar m a -> String -> STM m () Source #
labelTQueue :: MonadLabelledSTM m => StrictTQueue m a -> String -> STM m () Source #
labelTBQueue :: MonadLabelledSTM m => StrictTBQueue m a -> String -> STM m () Source #
labelTVarIO :: MonadLabelledSTM m => StrictTVar m a -> String -> m () Source #
labelTMVarIO :: MonadLabelledSTM m => StrictTMVar m a -> String -> m () Source #
labelTQueueIO :: MonadLabelledSTM m => StrictTQueue m a -> String -> m () Source #
labelTBQueueIO :: MonadLabelledSTM m => StrictTBQueue m a -> String -> m () Source #
modifyTVar :: MonadSTM m => StrictTVar m a -> (a -> a) -> STM m () Source #
newEmptyTMVar :: MonadSTM m => STM m (StrictTMVar m a) Source #
tryTakeTMVar :: MonadSTM m => StrictTMVar m a -> STM m (Maybe a) Source #
tryPutTMVar :: MonadSTM m => StrictTMVar m a -> a -> STM m Bool Source #
tryReadTMVar :: MonadSTM m => StrictTMVar m a -> STM m (Maybe a) Source #
writeTMVar :: MonadSTM m => StrictTMVar m a -> a -> STM m () Source #
isEmptyTMVar :: MonadSTM m => StrictTMVar m a -> STM m Bool Source #
readTQueue :: MonadSTM m => StrictTQueue m a -> STM m a Source #
tryReadTQueue :: MonadSTM m => StrictTQueue m a -> STM m (Maybe a) Source #
peekTQueue :: MonadSTM m => StrictTQueue m a -> STM m a Source #
tryPeekTQueue :: MonadSTM m => StrictTQueue m a -> STM m (Maybe a) Source #
flushTQueue :: MonadSTM m => StrictTQueue m a -> STM m [a] Source #
writeTQueue :: MonadSTM m => StrictTQueue m a -> a -> STM m () Source #
isEmptyTQueue :: MonadSTM m => StrictTQueue m a -> STM m Bool Source #
unGetTQueue :: MonadSTM m => StrictTQueue m a -> a -> STM m () Source #
newTBQueue :: MonadSTM m => Natural -> STM m (StrictTBQueue m a) Source #
readTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m a Source #
tryReadTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m (Maybe a) Source #
peekTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m a Source #
tryPeekTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m (Maybe a) Source #
flushTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m [a] Source #
writeTBQueue :: MonadSTM m => StrictTBQueue m a -> a -> STM m () Source #
lengthTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Natural Source #
isEmptyTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Bool Source #
isFullTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Bool Source #
unGetTBQueue :: MonadSTM m => StrictTBQueue m a -> a -> STM m () Source #
newBroadcastTChan :: MonadSTM m => STM m (StrictTChan m a) Source #
dupTChan :: MonadSTM m => StrictTChan m a -> STM m (StrictTChan m a) Source #
cloneTChan :: MonadSTM m => StrictTChan m a -> STM m (StrictTChan m a) Source #
tryReadTChan :: MonadSTM m => StrictTChan m a -> STM m (Maybe a) Source #
tryPeekTChan :: MonadSTM m => StrictTChan m a -> STM m (Maybe a) Source #
writeTChan :: MonadSTM m => StrictTChan m a -> a -> STM m () Source #
unGetTChan :: MonadSTM m => StrictTChan m a -> a -> STM m () Source #
isEmptyTChan :: MonadSTM m => StrictTChan m a -> STM m Bool Source #
newEmptyTMVarIO :: MonadSTM m => m (StrictTMVar m a) Source #
fromLazyTArray :: LazyTArray m i e -> StrictTArray m i e Source #
fromLazyTBQueue :: LazyTBQueue m a -> StrictTBQueue m a Source #
castStrictTBQueue :: LazyTBQueue m ~ LazyTBQueue n => StrictTBQueue m a -> StrictTBQueue n a Source #
fromLazyTChan :: LazyTChan m a -> StrictTChan m a Source #
castStrictTChan :: LazyTChan m ~ LazyTChan n => StrictTChan m a -> StrictTChan n a Source #
fromLazyTMVar :: LazyTMVar m a -> StrictTMVar m a Source #
castStrictTMVar :: LazyTMVar m ~ LazyTMVar n => StrictTMVar m a -> StrictTMVar n a Source #
fromLazyTQueue :: LazyTQueue m a -> StrictTQueue m a Source #
castStrictTQueue :: LazyTQueue m ~ LazyTQueue n => StrictTQueue m a -> StrictTQueue n a Source #
toLazyTVar :: StrictTVar m a -> LazyTVar m a Source #
Get the underlying TVar
Since we obviously cannot guarantee that updates to this LazyTVar will be
strict, this should be used with caution.
fromLazyTVar :: LazyTVar m a -> StrictTVar m a Source #
castStrictTVar :: LazyTVar m ~ LazyTVar n => StrictTVar m a -> StrictTVar n a Source #
Cast the monad if both use the same representation of TVars.
This function is useful for monad transformers stacks if the TVar is used
in different monad stacks.