{-# LANGUAGE ExistentialQuantification #-} module Control.Concurrent.STM.TVar.ReadOnly ( ReadOnlyTVar , toReadOnlyTVar ) where import Control.Concurrent.STM.TVar (TVar) import Control.Concurrent.STM.TVar.Class data ReadOnlyTVar b = forall a . ReadOnlyTVar (TVar a) (a -> b) toReadOnlyTVar :: TVar a -> ReadOnlyTVar a toReadOnlyTVar var = ReadOnlyTVar var id instance TVarRead ReadOnlyTVar where readTVar (ReadOnlyTVar var f) = f <$> readTVar var {-# INLINE readTVar #-}