module Control.Concurrent.STM.TVar.WriteOnly
( WriteOnlyTVar
, toWriteOnlyTVar
, writeTVar
) where

import Control.Concurrent.STM (STM)
import qualified Control.Concurrent.STM.TVar as TVar
import Control.Concurrent.STM.TVar (TVar)

newtype WriteOnlyTVar a = WriteOnlyTVar (TVar a)
    deriving Eq

toWriteOnlyTVar :: TVar a -> WriteOnlyTVar a
toWriteOnlyTVar = WriteOnlyTVar

writeTVar :: WriteOnlyTVar a -> a -> STM ()
writeTVar (WriteOnlyTVar var) =
  TVar.writeTVar var