
Nick wrote, quoting me, snipped
For example, will this stream library also subsume CML style events (as implemented by me as part of HTk), which allow you to wait on multiple events and return when any one of them occurs?
Well, this is an example wich requires concurrency. "Merge" of events will be available only on preemptive multithreaded implementation, unless I am wrong and there is an alternative way (like a "select" operator).
OK, with higher-order events, as invented by John Reppy (CML) and implemented by me in Haskell, you do have a select operator, and you do not need pre-emptive multithreading. (Obviously such things are a good thing anyway, but they are not essential.) So if an Event a is an event carrying a value of type "a", there is a function (+>) :: Event a -> Event a -> Event a which selects either of the two events. There is also another operator (>>>=) :: Event a -> (a -> IO b) -> Event b allowing you to postprocess the result of an event in some way. For example if you have two buttons, a "Yes" button with a click event (yes :: Event ()), and a "No" button with a click event (no :: Event ()) then you can define construct yesOrNo :: Event Bool yesOrNo = (yes >>>= (\ _ -> return True) +> (no >>>= (\ _ -> return False) Then sync yesOrNo will wait for the next button click, and tell you if it was of "Yes" or "No".
participants (1)
-
George Russell