io-sim-classes-0.2.0.0: Type classes for concurrency with STM, ST and timing
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Monad.Class.MonadSTM.Strict

Synopsis

Documentation

data TBQueueDefault m a Source #

Constructors

TBQueue !(TVar m Natural) !(TVar m [a]) !(TVar m Natural) !(TVar m [a]) !Natural 

data TQueueDefault m a Source #

Constructors

TQueue !(TVar m [a]) !(TVar m [a]) 

class (Monad m, MonadSTMTx (STM m)) => MonadSTM m where Source #

Minimal complete definition

atomically

Associated Types

type STM m :: Type -> Type Source #

Methods

atomically :: HasCallStack => STM m a -> m a Source #

newTBQueueIO :: Natural -> m (TBQueue m a) Source #

Instances

Instances details
MonadSTM IO Source # 
Instance details

Defined in Control.Monad.Class.MonadSTM

Associated Types

type STM IO :: Type -> Type Source #

MonadSTM m => MonadSTM (ReaderT r m) Source # 
Instance details

Defined in Control.Monad.Class.MonadSTM

Associated Types

type STM (ReaderT r m) :: Type -> Type Source #

Methods

atomically :: HasCallStack => STM (ReaderT r m) a -> ReaderT r m a Source #

newTVarIO :: a -> ReaderT r m (TVar (ReaderT r m) a) Source #

newTMVarIO :: a -> ReaderT r m (TMVar (ReaderT r m) a) Source #

newEmptyTMVarIO :: ReaderT r m (TMVar (ReaderT r m) a) Source #

newTBQueueIO :: Natural -> ReaderT r m (TBQueue (ReaderT r m) a) Source #

type TBQueue m = TBQueue_ (STM m) Source #

type TQueue m = TQueue_ (STM m) Source #

class (Monad stm, Alternative stm, MonadPlus stm) => MonadSTMTx stm where Source #

Associated Types

type TVar_ stm :: Type -> Type Source #

type TMVar_ stm :: Type -> Type Source #

type TQueue_ stm :: Type -> Type Source #

type TBQueue_ stm :: Type -> Type Source #

Methods

retry :: stm a Source #

orElse :: stm a -> stm a -> stm a Source #

modifyTVar' :: TVar_ stm a -> (a -> a) -> stm () Source #

check :: Bool -> stm () Source #

newTQueue :: stm (TQueue_ stm a) Source #

readTQueue :: TQueue_ stm a -> stm a Source #

tryReadTQueue :: TQueue_ stm a -> stm (Maybe a) Source #

writeTQueue :: TQueue_ stm a -> a -> stm () Source #

isEmptyTQueue :: TQueue_ stm a -> stm Bool Source #

newTBQueue :: Natural -> stm (TBQueue_ stm a) Source #

readTBQueue :: TBQueue_ stm a -> stm a Source #

tryReadTBQueue :: TBQueue_ stm a -> stm (Maybe a) Source #

flushTBQueue :: TBQueue_ stm a -> stm [a] Source #

writeTBQueue :: TBQueue_ stm a -> a -> stm () Source #

lengthTBQueue :: TBQueue_ stm a -> stm Natural Source #

Since: 0.2.0.0

isEmptyTBQueue :: TBQueue_ stm a -> stm Bool Source #

isFullTBQueue :: TBQueue_ stm a -> stm Bool Source #

Instances

Instances details
MonadSTMTx STM Source # 
Instance details

Defined in Control.Monad.Class.MonadSTM

Associated Types

type TVar_ STM :: Type -> Type Source #

type TMVar_ STM :: Type -> Type Source #

type TQueue_ STM :: Type -> Type Source #

type TBQueue_ STM :: Type -> Type Source #

Methods

newTVar :: a -> STM (TVar_ STM a) Source #

readTVar :: TVar_ STM a -> STM a Source #

writeTVar :: TVar_ STM a -> a -> STM () Source #

retry :: STM a Source #

orElse :: STM a -> STM a -> STM a Source #

modifyTVar :: TVar_ STM a -> (a -> a) -> STM () Source #

modifyTVar' :: TVar_ STM a -> (a -> a) -> STM () Source #

stateTVar :: TVar_ STM s -> (s -> (a, s)) -> STM a Source #

check :: Bool -> STM () Source #

newTMVar :: a -> STM (TMVar_ STM a) Source #

newEmptyTMVar :: STM (TMVar_ STM a) Source #

takeTMVar :: TMVar_ STM a -> STM a Source #

tryTakeTMVar :: TMVar_ STM a -> STM (Maybe a) Source #

putTMVar :: TMVar_ STM a -> a -> STM () Source #

tryPutTMVar :: TMVar_ STM a -> a -> STM Bool Source #

readTMVar :: TMVar_ STM a -> STM a Source #

tryReadTMVar :: TMVar_ STM a -> STM (Maybe a) Source #

swapTMVar :: TMVar_ STM a -> a -> STM a Source #

isEmptyTMVar :: TMVar_ STM a -> STM Bool Source #

newTQueue :: STM (TQueue_ STM a) Source #

readTQueue :: TQueue_ STM a -> STM a Source #

tryReadTQueue :: TQueue_ STM a -> STM (Maybe a) Source #

writeTQueue :: TQueue_ STM a -> a -> STM () Source #

isEmptyTQueue :: TQueue_ STM a -> STM Bool Source #

newTBQueue :: Natural -> STM (TBQueue_ STM a) Source #

readTBQueue :: TBQueue_ STM a -> STM a Source #

tryReadTBQueue :: TBQueue_ STM a -> STM (Maybe a) Source #

flushTBQueue :: TBQueue_ STM a -> STM [a] Source #

writeTBQueue :: TBQueue_ STM a -> a -> STM () Source #

lengthTBQueue :: TBQueue_ STM a -> STM Natural Source #

isEmptyTBQueue :: TBQueue_ STM a -> STM Bool Source #

isFullTBQueue :: TBQueue_ STM a -> STM Bool Source #

newTMVarMDefault :: MonadSTM m => a -> m (TMVarDefault m a) Source #

Deprecated: Use newTMVarIODefault

newEmptyTMVarMDefault :: MonadSTM m => m (TMVarDefault m a) Source #

Deprecated: Use newEmptyTMVarIODefault

putTMVarDefault :: MonadSTM m => TMVarDefault m a -> a -> STM m () Source #

throwSTM :: (MonadSTMTx stm, MonadThrow stm, Exception e) => e -> stm a Source #

throwIO specialised to stm monad.

catchSTM :: (MonadSTMTx stm, MonadCatch stm, Exception e) => stm a -> (e -> stm a) -> stm a Source #

catch speclialized for an stm monad.

type LazyTVar m = TVar m Source #

type LazyTMVar m = TMVar m Source #

StrictTVar

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.

newTVar :: MonadSTM m => a -> STM m (StrictTVar m a) Source #

newTVarIO :: MonadSTM m => a -> m (StrictTVar m a) Source #

newTVarWithInvariantIO Source #

Arguments

:: (MonadSTM m, HasCallStack) 
=> (a -> Maybe String)

Invariant (expect Nothing)

-> a 
-> m (StrictTVar m a) 

readTVar :: MonadSTM m => StrictTVar m a -> STM m a Source #

writeTVar :: (MonadSTM m, HasCallStack) => StrictTVar m a -> a -> STM m () Source #

modifyTVar :: MonadSTM m => StrictTVar m a -> (a -> a) -> STM m () Source #

stateTVar :: MonadSTM m => StrictTVar m a -> (a -> (a, b)) -> STM m b Source #

StrictTMVar

newTMVar :: MonadSTM m => a -> STM m (StrictTMVar m a) Source #

newTMVarIO :: MonadSTM m => a -> m (StrictTMVar m a) Source #

putTMVar :: MonadSTM m => StrictTMVar m a -> a -> STM m () Source #

swapTMVar :: MonadSTM m => StrictTMVar m a -> a -> STM m a Source #

Low-level API

checkInvariant :: HasCallStack => Maybe String -> a -> a Source #

Check invariant (if enabled) before continuing

checkInvariant mErr x is equal to x if mErr == Nothing, and throws an error err if mErr == Just err.

This is exported so that other code that wants to conditionally check invariants can reuse the same logic, rather than having to introduce new per-package flags.

Deprecated API

updateTVar :: MonadSTM m => StrictTVar m a -> (a -> (a, b)) -> STM m b Source #

Deprecated: Use stateTVar

newTVarM :: MonadSTM m => a -> m (StrictTVar m a) Source #

Deprecated: Use newTVarIO

newTVarWithInvariantM Source #

Arguments

:: (MonadSTM m, HasCallStack) 
=> (a -> Maybe String)

Invariant (expect Nothing)

-> a 
-> m (StrictTVar m a) 

Deprecated: Use newTVarWithInvariantIO

newTMVarM :: MonadSTM m => a -> m (StrictTMVar m a) Source #

Deprecated: Use newTVarIO

newEmptyTMVarM :: MonadSTM m => m (StrictTMVar m a) Source #

Deprecated: Use newEmptyTMVarIO