{-# LANGUAGE CPP #-}
module UnliftIO.STM
(
STM.STM
, atomically
, retrySTM
, checkSTM
, STM.orElse
, STM.TVar
, newTVarIO
, readTVarIO
, STM.newTVar
, STM.readTVar
, STM.writeTVar
, STM.modifyTVar
, STM.modifyTVar'
, STM.swapTVar
, registerDelay
, mkWeakTVar
, STM.TMVar
, STM.newTMVar
, STM.newEmptyTMVar
, newTMVarIO
, newEmptyTMVarIO
, STM.takeTMVar
, STM.putTMVar
, STM.readTMVar
, STM.tryReadTMVar
, STM.swapTMVar
, STM.tryTakeTMVar
, STM.tryPutTMVar
, STM.isEmptyTMVar
, mkWeakTMVar
, STM.TChan
, STM.newTChan
, newTChanIO
, STM.newBroadcastTChan
, newBroadcastTChanIO
, STM.dupTChan
, STM.cloneTChan
, STM.readTChan
, STM.tryReadTChan
, STM.peekTChan
, STM.tryPeekTChan
, STM.writeTChan
, STM.unGetTChan
, STM.isEmptyTChan
, STM.TQueue
, STM.newTQueue
, newTQueueIO
, STM.readTQueue
, STM.tryReadTQueue
, STM.peekTQueue
, STM.tryPeekTQueue
, STM.writeTQueue
, STM.unGetTQueue
, STM.isEmptyTQueue
, STM.TBQueue
, STM.newTBQueue
, newTBQueueIO
, STM.readTBQueue
, STM.tryReadTBQueue
, STM.flushTBQueue
, STM.peekTBQueue
, STM.tryPeekTBQueue
, STM.writeTBQueue
, STM.unGetTBQueue
, STM.lengthTBQueue
, STM.isEmptyTBQueue
, STM.isFullTBQueue
) where
import Control.Concurrent.STM (STM, TVar, TMVar, TChan, TQueue, TBQueue)
import qualified Control.Concurrent.STM as STM
import Control.Monad.IO.Unlift
import System.Mem.Weak (Weak)
#if MIN_VERSION_base(4, 8, 0)
import GHC.Natural (Natural)
#else
import Numeric.Natural (Natural)
#endif
atomically :: MonadIO m => STM a -> m a
atomically :: forall (m :: * -> *) a. MonadIO m => STM a -> m a
atomically = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. STM a -> IO a
STM.atomically
retrySTM :: STM a
retrySTM :: forall a. STM a
retrySTM = forall a. STM a
STM.retry
checkSTM :: Bool -> STM ()
checkSTM :: Bool -> STM ()
checkSTM = Bool -> STM ()
STM.check
newTVarIO :: MonadIO m => a -> m (TVar a)
newTVarIO :: forall (m :: * -> *) a. MonadIO m => a -> m (TVar a)
newTVarIO = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> IO (TVar a)
STM.newTVarIO
readTVarIO :: MonadIO m => TVar a -> m a
readTVarIO :: forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TVar a -> IO a
STM.readTVarIO
registerDelay :: MonadIO m => Int -> m (TVar Bool)
registerDelay :: forall (m :: * -> *). MonadIO m => Int -> m (TVar Bool)
registerDelay = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> IO (TVar Bool)
STM.registerDelay
mkWeakTVar :: MonadUnliftIO m => TVar a -> m () -> m (Weak (TVar a))
mkWeakTVar :: forall (m :: * -> *) a.
MonadUnliftIO m =>
TVar a -> m () -> m (Weak (TVar a))
mkWeakTVar TVar a
var m ()
final = forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
withRunInIO forall a b. (a -> b) -> a -> b
$ \forall a. m a -> IO a
run -> forall a. TVar a -> IO () -> IO (Weak (TVar a))
STM.mkWeakTVar TVar a
var (forall a. m a -> IO a
run m ()
final)
newTMVarIO :: MonadIO m => a -> m (TMVar a)
newTMVarIO :: forall (m :: * -> *) a. MonadIO m => a -> m (TMVar a)
newTMVarIO = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> IO (TMVar a)
STM.newTMVarIO
newEmptyTMVarIO :: MonadIO m => m (TMVar a)
newEmptyTMVarIO :: forall (m :: * -> *) a. MonadIO m => m (TMVar a)
newEmptyTMVarIO = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a. IO (TMVar a)
STM.newEmptyTMVarIO
mkWeakTMVar :: MonadUnliftIO m => TMVar a -> m () -> m (Weak (TMVar a))
mkWeakTMVar :: forall (m :: * -> *) a.
MonadUnliftIO m =>
TMVar a -> m () -> m (Weak (TMVar a))
mkWeakTMVar TMVar a
var m ()
final = forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
withRunInIO forall a b. (a -> b) -> a -> b
$ \forall a. m a -> IO a
run -> forall a. TMVar a -> IO () -> IO (Weak (TMVar a))
STM.mkWeakTMVar TMVar a
var (forall a. m a -> IO a
run m ()
final)
newTChanIO :: MonadIO m => m (TChan a)
newTChanIO :: forall (m :: * -> *) a. MonadIO m => m (TChan a)
newTChanIO = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a. IO (TChan a)
STM.newTChanIO
newBroadcastTChanIO :: MonadIO m => m (TChan a)
newBroadcastTChanIO :: forall (m :: * -> *) a. MonadIO m => m (TChan a)
newBroadcastTChanIO = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a. IO (TChan a)
STM.newBroadcastTChanIO
newTQueueIO :: MonadIO m => m (TQueue a)
newTQueueIO :: forall (m :: * -> *) a. MonadIO m => m (TQueue a)
newTQueueIO = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a. IO (TQueue a)
STM.newTQueueIO
#if MIN_VERSION_stm(2, 5, 0)
newTBQueueIO :: MonadIO m => Natural -> m (TBQueue a)
#else
newTBQueueIO :: MonadIO m => Int -> m (TBQueue a)
#endif
newTBQueueIO :: forall (m :: * -> *) a. MonadIO m => Natural -> m (TBQueue a)
newTBQueueIO = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Natural -> IO (TBQueue a)
STM.newTBQueueIO