packages feed

simple-sessions-0.1: Control/Concurrent/SimpleSession/TChan.lhs

\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