sig
  type 'a channel = 'a Event.channel
  val new_channel : unit -> 'a channel
  type 'a event = 'a Event.event
  val send : 'a channel -> 'a -> unit event
  val receive : 'a channel -> 'a event
  val always : 'a -> 'a event
  val choose : 'a event list -> 'a event
  val wrap : 'a event -> ('a -> 'b) -> 'b event
  val wrap_abort : 'a event -> (unit -> unit) -> 'a event
  val guard : (unit -> 'a event) -> 'a event
  val sync : 'a event -> 'a
  val select : 'a event list -> 'a
  val poll : 'a event -> 'a option
end