{-# 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 :: forall (μ :: * -> *) α. MonadBase STM μ => α -> μ (TVar α)
newTVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> STM (TVar a)
STM.newTVar
{-# INLINE newTVar #-}
newTVarIO ∷ MonadBase IO μ ⇒ α → μ (TVar α)
newTVarIO :: forall (μ :: * -> *) α. MonadBase IO μ => α -> μ (TVar α)
newTVarIO = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> IO (TVar a)
STM.newTVarIO
{-# INLINE newTVarIO #-}
readTVar ∷ MonadBase STM μ ⇒ TVar α → μ α
readTVar :: forall (μ :: * -> *) α. MonadBase STM μ => TVar α -> μ α
readTVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TVar a -> STM a
STM.readTVar
{-# INLINE readTVar #-}
readTVarIO ∷ MonadBase IO μ ⇒ TVar α → μ α
readTVarIO :: forall (μ :: * -> *) α. MonadBase IO μ => TVar α -> μ α
readTVarIO = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TVar a -> IO a
STM.readTVarIO
{-# INLINE readTVarIO #-}
writeTVar ∷ MonadBase STM μ ⇒ TVar α → α → μ ()
writeTVar :: forall (μ :: * -> *) α. MonadBase STM μ => TVar α -> α -> μ ()
writeTVar = (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
. forall a. TVar a -> a -> STM ()
STM.writeTVar
{-# INLINE writeTVar #-}
modifyTVar ∷ MonadBase STM μ ⇒ TVar α → (α → α) → μ ()
modifyTVar :: forall (μ :: * -> *) α.
MonadBase STM μ =>
TVar α -> (α -> α) -> μ ()
modifyTVar = (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
. forall a. TVar a -> (a -> a) -> STM ()
STM.modifyTVar
{-# INLINE modifyTVar #-}
modifyTVar' ∷ MonadBase STM μ ⇒ TVar α → (α → α) → μ ()
modifyTVar' :: forall (μ :: * -> *) α.
MonadBase STM μ =>
TVar α -> (α -> α) -> μ ()
modifyTVar' = (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
. forall a. TVar a -> (a -> a) -> STM ()
STM.modifyTVar'
{-# INLINE modifyTVar' #-}
swapTVar ∷ MonadBase STM μ ⇒ TVar α → α → μ α
swapTVar :: forall (μ :: * -> *) α. MonadBase STM μ => TVar α -> α -> μ α
swapTVar = (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
. forall a. TVar a -> a -> STM a
STM.swapTVar
{-# INLINE swapTVar #-}
registerDelay ∷ MonadBase IO μ ⇒ Int → μ (TVar Bool)
registerDelay :: forall (μ :: * -> *). MonadBase IO μ => Int -> μ (TVar Bool)
registerDelay = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> IO (TVar Bool)
STM.registerDelay
{-# INLINE registerDelay #-}
mkWeakTVar ∷ MonadBase IO μ ⇒ TVar α → IO () → μ (Weak (TVar α))
mkWeakTVar :: forall (μ :: * -> *) α.
MonadBase IO μ =>
TVar α -> IO () -> μ (Weak (TVar α))
mkWeakTVar = (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
. forall a. TVar a -> IO () -> IO (Weak (TVar a))
STM.mkWeakTVar
{-# INLINE mkWeakTVar #-}