module Control.Concurrent.STM.CTVar
(
CTVar
, newCTVar
, readCTVar
, writeCTVar
, modifyCTVar
, modifyCTVar'
, swapCTVar
) where
import Control.Monad.STM.Class
modifyCTVar :: MonadSTM m => CTVar m a -> (a -> a) -> m ()
modifyCTVar ctvar f = do
a <- readCTVar ctvar
writeCTVar ctvar $ f a
modifyCTVar' :: MonadSTM m => CTVar m a -> (a -> a) -> m ()
modifyCTVar' ctvar f = do
a <- readCTVar ctvar
writeCTVar ctvar $! f a
swapCTVar :: MonadSTM m => CTVar m a -> a -> m a
swapCTVar ctvar a = do
old <- readCTVar ctvar
writeCTVar ctvar a
return old