module Control.Concurrent.STM.TMVar.WriteOnly
( WriteOnlyTMVar
, toWriteOnlyTMVar
) where
import Control.Concurrent.STM.TMVar (TMVar)
import Control.Concurrent.STM.TMVar.Class
import Data.Functor.Contravariant
data WriteOnlyTMVar a = forall b . WriteOnlyTMVar (a -> b) (TMVar b)
instance Contravariant WriteOnlyTMVar where
contramap f (WriteOnlyTMVar f' var) = WriteOnlyTMVar (f' . f) var
toWriteOnlyTMVar :: TMVar a -> WriteOnlyTMVar a
toWriteOnlyTMVar = WriteOnlyTMVar id
instance TMVarWrite WriteOnlyTMVar where
putTMVar (WriteOnlyTMVar f var) = putTMVar var . f
tryPutTMVar (WriteOnlyTMVar f var) = tryPutTMVar var . f