{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE FlexibleContexts #-}
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
newTSem ∷ MonadBase STM μ ⇒ Integer → μ TSem
newTSem = liftBase . STM.newTSem
{-# INLINE newTSem #-}
waitTSem ∷ MonadBase STM μ ⇒ TSem → μ ()
waitTSem = liftBase . STM.waitTSem
{-# INLINE waitTSem #-}
signalTSem ∷ MonadBase STM μ ⇒ TSem → μ ()
signalTSem = liftBase . STM.signalTSem
{-# INLINE signalTSem #-}
signalTSemN ∷ MonadBase STM μ ⇒ Natural → TSem → μ ()
signalTSemN = (liftBase .) . STM.signalTSemN
{-# INLINE signalTSemN #-}