Setzer, Sebastian (ext) wrote:
Hi,
How do you wait on multiple channels, but read only from one of them
(the first that gets an entry)? Is there a library-function I missed
which already does this?

This is pretty hard with Control.Concurrent.Chan. They are simply not very easy to compose. STM is designed to be very easy to compose. (The first word of the title of the first paper - "Composable memory transactions",
http://research.microsoft.com/%7Esimonpj/papers/stm/index.htm)

If you can switch to TChan, you can use this function:

waitAny :: [TChan a] -> STM a
waitAny chans = msum (map readTChan chans)

which needs
import Control.Concurrent.STM.TChan (TChan, readTChan)
import Control.Monad (msum)
import Control.Monad.STM (STM) --also supplies instance MonadPlus STM

Brandon
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to