module Control.Concurrent.STM.TMVar.WriteOnly
( WriteOnlyTMVar
, ofTMVar
, putTMVar
, tryPutTMVar
, isEmptyTMVar
) where

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

newtype WriteOnlyTMVar a = WriteOnlyTMVar (TMVar a)
    deriving Eq

ofTMVar :: TMVar a -> WriteOnlyTMVar a
ofTMVar = WriteOnlyTMVar

putTMVar :: WriteOnlyTMVar a -> a -> STM ()
putTMVar (WriteOnlyTMVar var) =
  TMVar.putTMVar var

tryPutTMVar :: WriteOnlyTMVar a -> a -> STM Bool
tryPutTMVar (WriteOnlyTMVar var) =
  TMVar.tryPutTMVar var

isEmptyTMVar :: (WriteOnlyTMVar a) -> STM Bool
isEmptyTMVar (WriteOnlyTMVar var) =
  TMVar.isEmptyTMVar var