module Control.Concurrent.STM.TSem.Lifted
    ( module All
    , newTSemIO
    , waitTSemIO
    , signalTSemIO
    , signalTSemNIO
    ) where

import Numeric.Natural (Natural)
import Control.Concurrent.STM.TSem as All
import Internal

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

newTSemIO :: MonadIO m => Integer -> m TSem
newTSemIO = atomically . newTSem

waitTSemIO :: MonadIO m => TSem -> m ()
waitTSemIO = atomically . waitTSem

signalTSemIO :: MonadIO m => TSem -> m ()
signalTSemIO = atomically . signalTSem

signalTSemNIO :: MonadIO m => Natural -> TSem -> m ()
signalTSemNIO = atomically .: signalTSemN