module Control.Concurrent.STM.TChan.ReadOnly ( ReadOnlyTChan , ofTChan , readTChan , dupTChan ) 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) ofTChan :: TChan a -> ReadOnlyTChan a ofTChan = ReadOnlyTChan readTChan :: ReadOnlyTChan a -> STM a readTChan (ReadOnlyTChan chan) = TChan.readTChan chan dupTChan :: ReadOnlyTChan a -> STM (ReadOnlyTChan a) dupTChan (ReadOnlyTChan chan) = do dup <- TChan.dupTChan chan return (ofTChan dup)