module Control.Concurrent.STM.TChan.ReadOnly ( ReadOnlyTChan , toReadOnlyTChan , readTChan , dupReadOnlyTChan ) where import Control.Concurrent.STM (STM) import qualified Control.Concurrent.STM.TChan as TChan import Control.Concurrent.STM.TChan (TChan) newtype ReadOnlyTChan a = ReadOnlyTChan (TChan a) toReadOnlyTChan :: TChan a -> ReadOnlyTChan a toReadOnlyTChan = ReadOnlyTChan readTChan :: ReadOnlyTChan a -> STM a readTChan (ReadOnlyTChan chan) = TChan.readTChan chan dupReadOnlyTChan :: ReadOnlyTChan a -> STM (ReadOnlyTChan a) dupReadOnlyTChan (ReadOnlyTChan chan) = do dup <- TChan.dupTChan chan return (toReadOnlyTChan dup)