\ignore{
> module Control.Concurrent.SimpleSession.TChan (
> TChan, newTChan, writeTChan, readTChan
> ) where
>
> import Control.Concurrent.MVar
}
An |TChan a| is a monomorphic, synchronous channel that can transmit
values of type |a|:
> newtype TChan a
\ignore{
> = CC (MVar (MVar a))
>
> newTChan = newEmptyMVar >>= return . CC
>
> writeTChan (CC cc) v = do
> mv <- takeMVar cc
> putMVar mv v
>
> readTChan (CC cc) = do
> mv <- newEmptyMVar
> putMVar cc mv
> takeMVar mv
}
|TChan| has three operations:
> newTChan :: IO (TChan a)
> writeTChan :: TChan a -> a -> IO ()
> readTChan :: TChan a -> IO a