module Control.Concurrent.STM.TMVar.ReadOnly
( ReadOnlyTMVar
, toReadOnlyTMVar
) where
import Control.Concurrent.STM.TMVar (TMVar)
import Control.Concurrent.STM.TMVar.Class
data ReadOnlyTMVar b = forall a . ReadOnlyTMVar (TMVar a) (a -> b)
toReadOnlyTMVar :: TMVar a -> ReadOnlyTMVar a
toReadOnlyTMVar var = ReadOnlyTMVar var id
instance TMVarRead ReadOnlyTMVar where
takeTMVar (ReadOnlyTMVar var f) = f <$> takeTMVar var
readTMVar (ReadOnlyTMVar var f) = f <$> readTMVar var
tryTakeTMVar (ReadOnlyTMVar var f) = fmap f <$> tryTakeTMVar var