I'd like a function that blocks until data is
available on one of two channels and then returns
that data wrapped in an Either.  Here is my naive
implementation:

  readEitherChan::Chan a -> Chan b -> Either a b
  readEitherChan a b =
        do
        var <- newEmptyMVar
        forkIO (readChan a >>= putMVar var . Left)
        forkIO (readChan b >>= putMVar var . Right)
        val <- readMVar
        return val

  eitherChan a b left right = readEitherChan a b >>= either left right

But creating an MVar and starting two threads
feels like a lot of overhead for a simple
operation.

Is there a better way or is forkIO so efficient
that I shouldn't care?

-Alex-
_________________________________________________________________
S. Alexander Jacobson                  mailto:[EMAIL PROTECTED]
tel:917-770-6565                       http://alexjacobson.com
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to