{-# 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 :: forall (μ :: * -> *) α. MonadBase STM μ => α -> μ (TMVar α)
newTMVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> STM (TMVar a)
STM.newTMVar
{-# INLINE newTMVar #-}
newEmptyTMVar ∷ MonadBase STM μ ⇒ μ (TMVar α)
newEmptyTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => μ (TMVar α)
newEmptyTMVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall a. STM (TMVar a)
STM.newEmptyTMVar
{-# INLINE newEmptyTMVar #-}
newTMVarIO ∷ MonadBase IO μ ⇒ α → μ (TMVar α)
newTMVarIO :: forall (μ :: * -> *) α. MonadBase IO μ => α -> μ (TMVar α)
newTMVarIO = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> IO (TMVar a)
STM.newTMVarIO
{-# INLINE newTMVarIO #-}
newEmptyTMVarIO ∷ MonadBase IO μ ⇒ μ (TMVar α)
newEmptyTMVarIO :: forall (μ :: * -> *) α. MonadBase IO μ => μ (TMVar α)
newEmptyTMVarIO = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall a. IO (TMVar a)
STM.newEmptyTMVarIO
{-# INLINE newEmptyTMVarIO #-}
takeTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ α
takeTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => TMVar α -> μ α
takeTMVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TMVar a -> STM a
STM.takeTMVar
{-# INLINE takeTMVar #-}
tryTakeTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ (Maybe α)
tryTakeTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => TMVar α -> μ (Maybe α)
tryTakeTMVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TMVar a -> STM (Maybe a)
STM.tryTakeTMVar
{-# INLINE tryTakeTMVar #-}
putTMVar ∷ MonadBase STM μ ⇒ TMVar α → α → μ ()
putTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => TMVar α -> α -> μ ()
putTMVar = (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. TMVar a -> a -> STM ()
STM.putTMVar
{-# INLINE putTMVar #-}
tryPutTMVar ∷ MonadBase STM μ ⇒ TMVar α → α → μ Bool
tryPutTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => TMVar α -> α -> μ Bool
tryPutTMVar = (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. TMVar a -> a -> STM Bool
STM.tryPutTMVar
{-# INLINE tryPutTMVar #-}
readTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ α
readTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => TMVar α -> μ α
readTMVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TMVar a -> STM a
STM.readTMVar
{-# INLINE readTMVar #-}
tryReadTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ (Maybe α)
tryReadTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => TMVar α -> μ (Maybe α)
tryReadTMVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TMVar a -> STM (Maybe a)
STM.tryReadTMVar
{-# INLINE tryReadTMVar #-}
swapTMVar ∷ MonadBase STM μ ⇒ TMVar α → α → μ α
swapTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => TMVar α -> α -> μ α
swapTMVar = (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. TMVar a -> a -> STM a
STM.swapTMVar
{-# INLINE swapTMVar #-}
isEmptyTMVar ∷ MonadBase STM μ ⇒ TMVar α → μ Bool
isEmptyTMVar :: forall (μ :: * -> *) α. MonadBase STM μ => TMVar α -> μ Bool
isEmptyTMVar = forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TMVar a -> STM Bool
STM.isEmptyTMVar
{-# INLINE isEmptyTMVar #-}
mkWeakTMVar ∷ MonadBase IO μ ⇒ TMVar α → IO () → μ (Weak (TMVar α))
mkWeakTMVar :: forall (μ :: * -> *) α.
MonadBase IO μ =>
TMVar α -> IO () -> μ (Weak (TMVar α))
mkWeakTMVar = (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. TMVar a -> IO () -> IO (Weak (TMVar a))
STM.mkWeakTMVar
{-# INLINE mkWeakTMVar #-}