sig
  type 'a t
  val make : unit -> 'Ccell.Mbox.t
  val push : 'Ccell.Mbox.t -> '-> unit Ccell.Event.event
  val pop : 'Ccell.Mbox.t -> 'Ccell.Event.event
  val pop_reserve : 'Ccell.Mbox.t -> 'Ccell.Ivar.t
  val is_empty : 'Ccell.Mbox.t -> bool
  val length : 'Ccell.Mbox.t -> int
  val pop_all : 'Ccell.Mbox.t -> 'a list Ccell.Event.event
end