sig
  type 'a channel
  val new_channel : unit -> 'Ccell.Event.channel
  type 'a event
  val send : 'Ccell.Event.channel -> '-> unit Ccell.Event.event
  val receive : 'Ccell.Event.channel -> 'Ccell.Event.event
  val always : '-> 'Ccell.Event.event
  val choose : 'Ccell.Event.event list -> 'Ccell.Event.event
  val wrap : 'Ccell.Event.event -> ('-> 'b) -> 'Ccell.Event.event
  val guard : (unit -> 'Ccell.Event.event) -> 'Ccell.Event.event
  val join : 'Ccell.Event.event Ccell.Event.event -> 'Ccell.Event.event
  val sync : 'Ccell.Event.event -> 'a
  val select : 'Ccell.Event.event list -> 'a
  val poll : 'Ccell.Event.event -> 'a option
  val never : 'Ccell.Event.event
  val return : '-> 'Ccell.Event.event
  val bind :
    'Ccell.Event.event ->
    ('-> 'Ccell.Event.event) -> 'Ccell.Event.event
  val ( >>= ) :
    'Ccell.Event.event ->
    ('-> 'Ccell.Event.event) -> 'Ccell.Event.event
  val ( >> ) :
    'Ccell.Event.event -> 'Ccell.Event.event -> 'Ccell.Event.event
  val fmap : ('-> 'b) -> 'Ccell.Event.event -> 'Ccell.Event.event
  val fmap2 :
    ('-> '-> 'c) ->
    'Ccell.Event.event -> 'Ccell.Event.event -> 'Ccell.Event.event
  val app :
    ('-> 'b) Ccell.Event.event ->
    'Ccell.Event.event -> 'Ccell.Event.event
  val mzero : 'Ccell.Event.event
  val mplus :
    'Ccell.Event.event -> 'Ccell.Event.event -> 'Ccell.Event.event
  val receive_reserve : 'Ccell.Event.channel -> 'Ccell.Ivar.t
  val filter : ('-> bool) -> 'Ccell.Event.event -> 'Ccell.Event.event
  val filter_map :
    ('-> 'b option) -> 'Ccell.Event.event -> 'Ccell.Event.event
  val sequence : 'Ccell.Event.event list -> 'a list Ccell.Event.event
  val future : ('-> 'b) -> '-> 'Ccell.Event.event
  module Cell :
    sig
      type 'a t
      val make : unit -> 'Ccell.Event.Cell.t
      val init_make : '-> 'Ccell.Event.Cell.t
      val read : 'Ccell.Event.Cell.t -> 'Ccell.Event.event
      val take : 'Ccell.Event.Cell.t -> 'Ccell.Event.event
      val put : 'Ccell.Event.Cell.t -> '-> unit Ccell.Event.event
    end
end