[Haskell-cafe] readEitherChan

Thomas Hallgren hallgren at cse.ogi.edu
Fri Jun 18 22:06:14 EDT 2004

Tomasz Zielonka wrote:

>On Tue, Jun 15, 2004 at 06:29:59PM -0400, S. Alexander Jacobson wrote:
>>  readEitherChan::Chan a -> Chan b -> Either a b
>>  eitherChan a b left right = readEitherChan a b >>= either left right
>... I think it would be safer to create once new Chan (Either a b), and then read from it.
>    createEitherChan :: Chan a -> Chan b -> IO (Chan (Either a b))
Although createEitherChan might be the best solution for some 
application, it would be interesting to know what the recommended way to 
implement the function eitherChan above is, if that is what you really need?

The eitherChan function corresponds to guarded nondeterministic choice, 
usually written (a?P)+(b?Q) process calculi, i.e., a rather fundamental 
concurrency operator.

Section 5 of [1] enumerates some reasons why guarded nondeterministic 
choice is not available as a primitive in Concurrent Haskell. Section 
5.2 describes a function select for nondeterministic choice, but I don't 
see how to use that to implement readEitherChan (or takeEitherMVar)...

I got interested in this the other day when I was contemplating reviving 
Gadget Gofer [2], by porting it to Concurrent Haskell. Gadget Gofer has 
a non-deterministic choice operator, though, so the port would probably 
require more work than I expected...

Thomas H

[1] Concurrent Haskell
[2] Lazy Functional Components for Graphical User Interfaces,
    Rob Noble, PhD thesis, York, 1996

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
Url : http://www.haskell.org//pipermail/haskell-cafe/attachments/20040618/7445c2ee/signature.bin

More information about the Haskell-Cafe mailing list