{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE FlexibleContexts #-}
module Control.Concurrent.STM.TMVar.Lifted
( TMVar
, newTMVar
, newEmptyTMVar
, newTMVarIO
, newEmptyTMVarIO
, takeTMVar
, tryTakeTMVar
, putTMVar
, tryPutTMVar
, readTMVar
, tryReadTMVar
, swapTMVar
, isEmptyTMVar
, mkWeakTMVar
) where
import Control.Monad.Base (MonadBase(..))
import Control.Monad.STM (STM)
import Control.Concurrent.STM.TMVar (TMVar)
import qualified Control.Concurrent.STM.TMVar as STM
import System.Mem.Weak (Weak)
newTMVar ∷ MonadBase STM μ ⇒ α → μ (TMVar α)
newTMVar = liftBase . STM.newTMVar
{-# INLINE newTMVar #-}
newEmptyTMVar ∷ MonadBase STM μ ⇒ μ (TMVar α)
newEmptyTMVar = liftBase STM.newEmptyTMVar
{-# INLINE newEmptyTMVar #-}
newTMVarIO ∷ MonadBase IO μ ⇒ α → μ (TMVar α)
newTMVarIO = liftBase . STM.newTMVarIO
{-# INLINE newTMVarIO #-}
newEmptyTMVarIO ∷ MonadBase IO μ ⇒ μ (TMVar α)
newEmptyTMVarIO = liftBase STM.newEmptyTMVarIO
{-# INLINE newEmptyTMVarIO #-}
takeTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ α
takeTMVar = liftBase . STM.takeTMVar
{-# INLINE takeTMVar #-}
tryTakeTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ (Maybe α)
tryTakeTMVar = liftBase . STM.tryTakeTMVar
{-# INLINE tryTakeTMVar #-}
putTMVar ∷ MonadBase STM μ ⇒ TMVar α → α → μ ()
putTMVar = (liftBase .) . STM.putTMVar
{-# INLINE putTMVar #-}
tryPutTMVar ∷ MonadBase STM μ ⇒ TMVar α → α → μ Bool
tryPutTMVar = (liftBase .) . STM.tryPutTMVar
{-# INLINE tryPutTMVar #-}
readTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ α
readTMVar = liftBase . STM.readTMVar
{-# INLINE readTMVar #-}
tryReadTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ (Maybe α)
tryReadTMVar = liftBase . STM.tryReadTMVar
{-# INLINE tryReadTMVar #-}
swapTMVar ∷ MonadBase STM μ ⇒ TMVar α → α → μ α
swapTMVar = (liftBase .) . STM.swapTMVar
{-# INLINE swapTMVar #-}
isEmptyTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ Bool
isEmptyTMVar = liftBase . STM.isEmptyTMVar
{-# INLINE isEmptyTMVar #-}
mkWeakTMVar ∷ MonadBase IO μ ⇒ TMVar α → IO () → μ (Weak (TMVar α))
mkWeakTMVar = (liftBase .) . STM.mkWeakTMVar
{-# INLINE mkWeakTMVar #-}