{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE FlexibleContexts #-}
module Control.Concurrent.STM.TVar.Lifted
( TVar
, newTVar
, newTVarIO
, readTVar
, readTVarIO
, writeTVar
, modifyTVar
, modifyTVar'
, swapTVar
, registerDelay
, mkWeakTVar
) where
import Control.Monad.Base (MonadBase(..))
import Control.Monad.STM (STM)
import Control.Concurrent.STM.TVar (TVar)
import qualified Control.Concurrent.STM.TVar as STM
import System.Mem.Weak (Weak)
newTVar ∷ MonadBase STM μ ⇒ α → μ (TVar α)
newTVar = liftBase . STM.newTVar
{-# INLINE newTVar #-}
newTVarIO ∷ MonadBase IO μ ⇒ α → μ (TVar α)
newTVarIO = liftBase . STM.newTVarIO
{-# INLINE newTVarIO #-}
readTVar ∷ MonadBase STM μ ⇒ TVar α → μ α
readTVar = liftBase . STM.readTVar
{-# INLINE readTVar #-}
readTVarIO ∷ MonadBase IO μ ⇒ TVar α → μ α
readTVarIO = liftBase . STM.readTVarIO
{-# INLINE readTVarIO #-}
writeTVar ∷ MonadBase STM μ ⇒ TVar α → α → μ ()
writeTVar = (liftBase .) . STM.writeTVar
{-# INLINE writeTVar #-}
modifyTVar ∷ MonadBase STM μ ⇒ TVar α → (α → α) → μ ()
modifyTVar = (liftBase .) . STM.modifyTVar
{-# INLINE modifyTVar #-}
modifyTVar' ∷ MonadBase STM μ ⇒ TVar α → (α → α) → μ ()
modifyTVar' = (liftBase .) . STM.modifyTVar'
{-# INLINE modifyTVar' #-}
swapTVar ∷ MonadBase STM μ ⇒ TVar α → α → μ α
swapTVar = (liftBase .) . STM.swapTVar
{-# INLINE swapTVar #-}
registerDelay ∷ MonadBase IO μ ⇒ Int → μ (TVar Bool)
registerDelay = liftBase . STM.registerDelay
{-# INLINE registerDelay #-}
mkWeakTVar ∷ MonadBase IO μ ⇒ TVar α → IO () → μ (Weak (TVar α))
mkWeakTVar = (liftBase .) . STM.mkWeakTVar
{-# INLINE mkWeakTVar #-}