module Control.Concurrent.MVar.WriteOnly
( WriteOnlyMVar
, toWriteOnlyMVar
) where
import Control.Concurrent.MVar (MVar)
import Control.Concurrent.MVar.Class
import Data.Functor.Contravariant
data WriteOnlyMVar a = forall b . WriteOnlyMVar (a -> b) (MVar b)
instance Contravariant WriteOnlyMVar where
contramap f (WriteOnlyMVar f' var) = WriteOnlyMVar (f' . f) var
toWriteOnlyMVar :: MVar a -> WriteOnlyMVar a
toWriteOnlyMVar = WriteOnlyMVar id
instance MVarWrite WriteOnlyMVar where
putMVar (WriteOnlyMVar f var) a = putMVar var (f a)
tryPutMVar (WriteOnlyMVar f var) a = tryPutMVar var (f a)