module Control.Concurrent.STM.TMVar.ReadOnly
( ReadOnlyTMVar
, toReadOnlyTMVar
, takeTMVar
, readTMVar
, tryTakeTMVar
, isEmptyTMVar
) where
import Control.Concurrent.STM (STM)
import Control.Concurrent.STM.TMVar (TMVar)
import qualified Control.Concurrent.STM.TMVar as TMVar
data ReadOnlyTMVar b = forall a . ReadOnlyTMVar (TMVar a) (a -> b)
toReadOnlyTMVar :: TMVar a -> ReadOnlyTMVar a
toReadOnlyTMVar var = ReadOnlyTMVar var id
takeTMVar :: ReadOnlyTMVar a -> STM a
takeTMVar (ReadOnlyTMVar var f) =
f <$> TMVar.takeTMVar var
readTMVar :: ReadOnlyTMVar a -> STM a
readTMVar (ReadOnlyTMVar var f) =
f <$> TMVar.readTMVar var
tryTakeTMVar :: ReadOnlyTMVar a -> STM (Maybe a)
tryTakeTMVar (ReadOnlyTMVar var f) =
fmap f <$> TMVar.tryTakeTMVar var
isEmptyTMVar :: (ReadOnlyTMVar a) -> STM Bool
isEmptyTMVar (ReadOnlyTMVar var _) =
TMVar.isEmptyTMVar var