reenact-0.6: src/Control/Reactive/Chan.hs
module Control.Reactive.Chan (
Chan(..),
newChan,
dupChan,
readChan,
tryReadChan,
writeChan,
) where
import Data.Monoid
import Data.Maybe
import Control.Monad
import Control.Applicative
import Control.Concurrent (forkIO, forkOS, threadDelay)
import Control.Monad.STM (atomically)
import Control.Concurrent.STM.TChan
import Control.Concurrent.STM.TMVar
import System.IO.Unsafe
newtype Chan a = Chan { getChan :: TChan a }
newChan :: IO (Chan a)
newChan = do
c' <- atomically $ newTChan
return (Chan c')
dupChan :: Chan a -> IO (Chan a)
dupChan (Chan c) = do
c' <- atomically . dupTChan $ c
return (Chan c')
writeChan :: Chan a -> a -> IO ()
writeChan (Chan c) x = atomically $ writeTChan c x
readChan :: Chan a -> IO a
readChan (Chan c) = atomically $ readTChan c
tryReadChan :: Chan a -> IO (Maybe a)
tryReadChan (Chan c) = atomically $ tryReadTChan c