{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE FlexibleContexts #-}
module Control.Concurrent.STM.TBQueue.Lifted
( TBQueue
, newTBQueue
, newTBQueueIO
, readTBQueue
, tryReadTBQueue
, peekTBQueue
, tryPeekTBQueue
, flushTBQueue
, writeTBQueue
, unGetTBQueue
, isEmptyTBQueue
, isFullTBQueue
) where
import Numeric.Natural (Natural)
import Control.Monad.Base (MonadBase(..))
import Control.Monad.STM (STM)
import Control.Concurrent.STM.TBQueue (TBQueue)
import qualified Control.Concurrent.STM.TBQueue as STM
newTBQueue ∷ MonadBase STM μ ⇒ Natural → μ (TBQueue α)
newTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => Natural -> μ (TBQueue α)
newTBQueue = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Natural -> STM (TBQueue a)
STM.newTBQueue
{-# INLINE newTBQueue #-}
newTBQueueIO ∷ MonadBase IO μ ⇒ Natural → μ (TBQueue α)
newTBQueueIO :: forall (μ :: * -> *) α. MonadBase IO μ => Natural -> μ (TBQueue α)
newTBQueueIO = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Natural -> IO (TBQueue a)
STM.newTBQueueIO
{-# INLINE newTBQueueIO #-}
readTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → μ α
readTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> μ α
readTBQueue = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> STM a
STM.readTBQueue
{-# INLINE readTBQueue #-}
tryReadTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → μ (Maybe α)
tryReadTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> μ (Maybe α)
tryReadTBQueue = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> STM (Maybe a)
STM.tryReadTBQueue
{-# INLINE tryReadTBQueue #-}
peekTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → μ α
peekTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> μ α
peekTBQueue = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> STM a
STM.peekTBQueue
{-# INLINE peekTBQueue #-}
tryPeekTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → μ (Maybe α)
tryPeekTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> μ (Maybe α)
tryPeekTBQueue = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> STM (Maybe a)
STM.tryPeekTBQueue
{-# INLINE tryPeekTBQueue #-}
flushTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → μ [α]
flushTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> μ [α]
flushTBQueue = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> STM [a]
STM.flushTBQueue
{-# INLINE flushTBQueue #-}
writeTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → α → μ ()
writeTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> α -> μ ()
writeTBQueue = (forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
.) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> a -> STM ()
STM.writeTBQueue
{-# INLINE writeTBQueue #-}
unGetTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → α → μ ()
unGetTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> α -> μ ()
unGetTBQueue = (forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
.) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> a -> STM ()
STM.unGetTBQueue
{-# INLINE unGetTBQueue #-}
isEmptyTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → μ Bool
isEmptyTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> μ Bool
isEmptyTBQueue = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> STM Bool
STM.isEmptyTBQueue
{-# INLINE isEmptyTBQueue #-}
isFullTBQueue ∷ MonadBase STM μ ⇒ TBQueue α → μ Bool
isFullTBQueue :: forall (μ :: * -> *) α. MonadBase STM μ => TBQueue α -> μ Bool
isFullTBQueue = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TBQueue a -> STM Bool
STM.isFullTBQueue
{-# INLINE isFullTBQueue #-}