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