module Control.Concurrent.STM.TChan.WriteOnly ( WriteOnlyTChan , ofChan , writeTChan , dupTChan , unGetTChan , isEmptyTChan ) where import Control.Concurrent.STM (STM) import qualified Control.Concurrent.STM.TChan as TChan import Control.Concurrent.STM.TChan (TChan) newtype WriteOnlyTChan a = WriteOnlyTChan (TChan a) ofChan :: TChan a -> WriteOnlyTChan a ofChan = WriteOnlyTChan writeTChan :: WriteOnlyTChan a -> a -> STM () writeTChan (WriteOnlyTChan chan) = TChan.writeTChan chan dupTChan :: WriteOnlyTChan a -> STM (WriteOnlyTChan a) dupTChan (WriteOnlyTChan chan) = do dup <- TChan.dupTChan chan return (ofChan dup) unGetTChan :: WriteOnlyTChan a -> a -> STM () unGetTChan (WriteOnlyTChan chan) = TChan.unGetTChan chan isEmptyTChan :: WriteOnlyTChan a -> STM Bool isEmptyTChan (WriteOnlyTChan chan) = TChan.isEmptyTChan chan