stm-chans- Additional types of channels for STM.

Portabilitynon-portable (STM, CPP)
Safe HaskellSafe-Infered




Compatibility layer for older versions of the stm library. Namely, we define readTVarIO which stm-2.1.1 lacks; and we define modifyTVar, modifyTVar', and swapTVar which stm-X.X.X lacks. This module uses Cabal-style CPP macros in order to use the package versions when available.


The TVar type

data TVar a

Shared memory locations that support atomic memory transactions.


Creating TVars

newTVar :: a -> STM (TVar a)

Create a new TVar holding a value supplied

newTVarIO :: a -> IO (TVar a)

IO version of newTVar. This is useful for creating top-level TVars using unsafePerformIO, because using atomically inside unsafePerformIO isn't possible.

Reading from TVars

readTVar :: TVar a -> STM a

Return the current value stored in a TVar

readTVarIO :: TVar a -> IO a

Return the current value stored in a TVar. This is equivalent to

  readTVarIO = atomically . readTVar

but works much faster, because it doesn't perform a complete transaction, it just reads the current value of the TVar.

Writing to TVars

writeTVar :: TVar a -> a -> STM ()

Write the supplied value into a TVar

modifyTVar :: TVar a -> (a -> a) -> STM ()Source

Mutate the contents of a TVar. N.B., this version is non-strict.

modifyTVar' :: TVar a -> (a -> a) -> STM ()Source

Strict version of modifyTVar.

swapTVar :: TVar a -> a -> STM aSource

Swap the contents of a TVar for a new value.

Other capabilities

registerDelay :: Int -> IO (TVar Bool)

Set the value of returned TVar to True after a given number of microseconds. The caveats associated with threadDelay also apply.