text: abstract. concurrent ml’s events and event combinators facilitate modular concurrent programming with first-class synchronization abstractions. a standard
  implementation of these abstractions relies on fairly complex manipulations of
  first-class continuations in the underlying language. in this paper, we present a
  lightweight implementation of these abstractions in concurrent haskell, a language that already provides first-order message passing. at the heart of our implementation is a new distributed synchronization protocol. in contrast with several
  previous translations of event abstractions in concurrent languages, we remain
  faithful to the standard semantics for events and event combinators; for example,
  we retain the symmetry of choose for expressing selective communication.