\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