module Control.Concurrent.STM.TVar.WriteOnly
( WriteOnlyTVar
, toWriteOnlyTVar
, writeTVar
) where
import Control.Concurrent.STM (STM)
import Control.Concurrent.STM.TVar (TVar)
import qualified Control.Concurrent.STM.TVar as TVar
import Data.Functor.Contravariant
data WriteOnlyTVar a = forall b . WriteOnlyTVar (a -> b) (TVar b)
instance Contravariant WriteOnlyTVar where
contramap f (WriteOnlyTVar f' var) = WriteOnlyTVar (f' . f) var
toWriteOnlyTVar :: TVar a -> WriteOnlyTVar a
toWriteOnlyTVar = WriteOnlyTVar id
writeTVar :: WriteOnlyTVar a -> a -> STM ()
writeTVar (WriteOnlyTVar f var) =
TVar.writeTVar var . f