{-# LANGUAGE ExistentialQuantification #-} 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 {-# INLINE takeTMVar #-} readTMVar (ReadOnlyTMVar var f) = f <$> readTMVar var {-# INLINE readTMVar #-} tryTakeTMVar (ReadOnlyTMVar var f) = fmap f <$> tryTakeTMVar var {-# INLINE tryTakeTMVar #-}