module Control.Concurrent.STM.TBQueue.Lifted
    ( module All
    , newTBQueueIO
    , readTBQueueIO
    , tryReadTBQueueIO
    , peekTBQueueIO
    , tryPeekTBQueueIO
    , writeTBQueueIO
    , unGetTBQueueIO
    , isEmptyTBQueueIO
    , isFullTBQueueIO
    ) where

import Control.Concurrent.STM.TBQueue as All hiding (newTBQueueIO)
import qualified Control.Concurrent.STM.TBQueue as STM
import Internal

----------------------------------------------------------------------


newTBQueueIO :: MonadIO m => Int -> m (TBQueue a)
newTBQueueIO = liftIO . STM.newTBQueueIO

writeTBQueueIO :: MonadIO m => TBQueue a -> a -> m ()
writeTBQueueIO = atomically .: writeTBQueue

readTBQueueIO :: MonadIO m => TBQueue a -> m a
readTBQueueIO = atomically . readTBQueue

tryReadTBQueueIO :: MonadIO m => TBQueue a -> m (Maybe a)
tryReadTBQueueIO = atomically . tryReadTBQueue

peekTBQueueIO :: MonadIO m => TBQueue a -> m a
peekTBQueueIO = atomically . peekTBQueue

tryPeekTBQueueIO :: MonadIO m => TBQueue a -> m (Maybe a)
tryPeekTBQueueIO = atomically . tryPeekTBQueue

unGetTBQueueIO :: MonadIO m => TBQueue a -> a -> m ()
unGetTBQueueIO = atomically .: unGetTBQueue

isEmptyTBQueueIO :: MonadIO m => TBQueue a -> m Bool
isEmptyTBQueueIO = atomically . isEmptyTBQueue

isFullTBQueueIO :: MonadIO m => TBQueue a -> m Bool
isFullTBQueueIO = atomically . isFullTBQueue