lifted-stm-0.2: src/Control/Concurrent/STM/TSem/Lifted.hs
{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE FlexibleContexts #-}
-- | Lifted 'STM.TSem' operations.
module Control.Concurrent.STM.TSem.Lifted
( TSem
, newTSem
, waitTSem
, signalTSem
, signalTSemN
) where
import Numeric.Natural (Natural)
import Control.Monad.Base (MonadBase(..))
import Control.Monad.STM (STM)
import Control.Concurrent.STM.TSem (TSem)
import qualified Control.Concurrent.STM.TSem as STM
-- | A lifted version of 'STM.newTSem'.
newTSem ∷ MonadBase STM μ ⇒ Integer → μ TSem
newTSem = liftBase . STM.newTSem
{-# INLINE newTSem #-}
-- | A lifted version of 'STM.waitTSem'.
waitTSem ∷ MonadBase STM μ ⇒ TSem → μ ()
waitTSem = liftBase . STM.waitTSem
{-# INLINE waitTSem #-}
-- | A lifted version of 'STM.signalTSem'.
signalTSem ∷ MonadBase STM μ ⇒ TSem → μ ()
signalTSem = liftBase . STM.signalTSem
{-# INLINE signalTSem #-}
-- | A lifted version of 'STM.signalTSemN'.
signalTSemN ∷ MonadBase STM μ ⇒ Natural → TSem → μ ()
signalTSemN = (liftBase .) . STM.signalTSemN
{-# INLINE signalTSemN #-}