{-# 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 :: forall (μ :: * -> *). MonadBase STM μ => Integer -> μ TSem
newTSem = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> STM TSem
STM.newTSem
{-# INLINE newTSem #-}
waitTSem ∷ MonadBase STM μ ⇒ TSem → μ ()
waitTSem :: forall (μ :: * -> *). MonadBase STM μ => TSem -> μ ()
waitTSem = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. TSem -> STM ()
STM.waitTSem
{-# INLINE waitTSem #-}
signalTSem ∷ MonadBase STM μ ⇒ TSem → μ ()
signalTSem :: forall (μ :: * -> *). MonadBase STM μ => TSem -> μ ()
signalTSem = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. TSem -> STM ()
STM.signalTSem
{-# INLINE signalTSem #-}
signalTSemN ∷ MonadBase STM μ ⇒ Natural → TSem → μ ()
signalTSemN :: forall (μ :: * -> *). MonadBase STM μ => Natural -> TSem -> μ ()
signalTSemN = (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
. Natural -> TSem -> STM ()
STM.signalTSemN
{-# INLINE signalTSemN #-}