module Control.Concurrent.STM.TMVar.Lifted
	( module All
    , newTMVarIO
	, newEmptyTMVarIO
	, takeTMVarIO
	, putTMVarIO
	, readTMVarIO
	, tryReadTMVarIO
	, swapTMVarIO
	, tryTakeTMVarIO
	, tryPutTMVarIO
	, isEmptyTMVarIO
    ) where

import Control.Concurrent.STM.TMVar as All
    hiding (newTMVarIO, newEmptyTMVarIO)
import qualified Control.Concurrent.STM.TMVar as STM
import Internal

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

newTMVarIO :: MonadIO m => a -> m (TMVar a)
newTMVarIO = liftIO . STM.newTMVarIO

newEmptyTMVarIO :: MonadIO m => m (TMVar a)
newEmptyTMVarIO = liftIO STM.newEmptyTMVarIO

takeTMVarIO :: MonadIO m => TMVar a -> m a
takeTMVarIO = atomically . takeTMVar

tryTakeTMVarIO :: MonadIO m => TMVar a -> m (Maybe a)
tryTakeTMVarIO = atomically . tryTakeTMVar

putTMVarIO :: MonadIO m => TMVar a -> a -> m ()
putTMVarIO = atomically .: putTMVar

tryPutTMVarIO :: MonadIO m => TMVar a -> a -> m Bool
tryPutTMVarIO = atomically .: tryPutTMVar

readTMVarIO :: MonadIO m => TMVar a -> m a
readTMVarIO = atomically . readTMVar

tryReadTMVarIO :: MonadIO m => TMVar a -> m (Maybe a)
tryReadTMVarIO = atomically . tryReadTMVar

swapTMVarIO :: MonadIO m => TMVar a -> a -> m a
swapTMVarIO = atomically .: swapTMVar

isEmptyTMVarIO :: MonadIO m => TMVar a -> m Bool
isEmptyTMVarIO = atomically . isEmptyTMVar