strict-stm-1.0.0.1: src/Control/Concurrent/Class/MonadSTM/Strict/TBQueue.hs
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE ExplicitNamespaces #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeOperators #-}
-- | This module corresponds to `Control.Concurrent.STM.TBQueue` in "stm" package
--
module Control.Concurrent.Class.MonadSTM.Strict.TBQueue
( -- * MonadSTM
StrictTBQueue
, LazyTBQueue
, toLazyTBQueue
, fromLazyTBQueue
, castStrictTBQueue
, newTBQueue
, newTBQueueIO
, readTBQueue
, tryReadTBQueue
, peekTBQueue
, tryPeekTBQueue
, flushTBQueue
, writeTBQueue
, lengthTBQueue
, isEmptyTBQueue
, isFullTBQueue
, unGetTBQueue
-- * MonadLabelledSTM
, labelTBQueue
, labelTBQueueIO
-- * MonadTraceSTM
, traceTBQueue
, traceTBQueueIO
) where
import qualified Control.Concurrent.Class.MonadSTM.TBQueue as Lazy
import Control.Monad.Class.MonadSTM hiding (traceTBQueue, traceTBQueueIO)
import Numeric.Natural (Natural)
type LazyTBQueue m = Lazy.TBQueue m
newtype StrictTBQueue m a = StrictTBQueue { toLazyTBQueue :: LazyTBQueue m a }
fromLazyTBQueue :: LazyTBQueue m a -> StrictTBQueue m a
fromLazyTBQueue = StrictTBQueue
castStrictTBQueue :: LazyTBQueue m ~ LazyTBQueue n
=> StrictTBQueue m a -> StrictTBQueue n a
castStrictTBQueue (StrictTBQueue var) = StrictTBQueue var
labelTBQueue :: MonadLabelledSTM m => StrictTBQueue m a -> String -> STM m ()
labelTBQueue (StrictTBQueue queue) = Lazy.labelTBQueue queue
labelTBQueueIO :: MonadLabelledSTM m => StrictTBQueue m a -> String -> m ()
labelTBQueueIO (StrictTBQueue queue) = Lazy.labelTBQueueIO queue
traceTBQueue :: MonadTraceSTM m
=> proxy m
-> StrictTBQueue m a
-> ((Maybe [a]) -> [a] -> InspectMonad m TraceValue)
-> STM m ()
traceTBQueue p (StrictTBQueue queue) = Lazy.traceTBQueue p queue
traceTBQueueIO :: MonadTraceSTM m
=> StrictTBQueue m a
-> ((Maybe [a]) -> [a] -> InspectMonad m TraceValue)
-> m ()
traceTBQueueIO (StrictTBQueue queue) = Lazy.traceTBQueueIO queue
newTBQueue :: MonadSTM m => Natural -> STM m (StrictTBQueue m a)
newTBQueue n = StrictTBQueue <$> Lazy.newTBQueue n
newTBQueueIO :: MonadSTM m => Natural -> m (StrictTBQueue m a)
newTBQueueIO = atomically . newTBQueue
readTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m a
readTBQueue = Lazy.readTBQueue . toLazyTBQueue
tryReadTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m (Maybe a)
tryReadTBQueue = Lazy.tryReadTBQueue . toLazyTBQueue
peekTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m a
peekTBQueue = Lazy.peekTBQueue . toLazyTBQueue
tryPeekTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m (Maybe a)
tryPeekTBQueue = Lazy.tryPeekTBQueue . toLazyTBQueue
flushTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m [a]
flushTBQueue = Lazy.flushTBQueue . toLazyTBQueue
writeTBQueue :: MonadSTM m => StrictTBQueue m a -> a -> STM m ()
writeTBQueue (StrictTBQueue tqueue) !a = Lazy.writeTBQueue tqueue a
lengthTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Natural
lengthTBQueue = Lazy.lengthTBQueue . toLazyTBQueue
isEmptyTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Bool
isEmptyTBQueue = Lazy.isEmptyTBQueue . toLazyTBQueue
isFullTBQueue :: MonadSTM m => StrictTBQueue m a -> STM m Bool
isFullTBQueue = Lazy.isFullTBQueue . toLazyTBQueue
unGetTBQueue :: MonadSTM m => StrictTBQueue m a -> a -> STM m ()
unGetTBQueue (StrictTBQueue queue) !a = Lazy.unGetTBQueue queue a