sig
  type 'a t
  val make : unit -> 'Ccell.Mvar.t
  val init_make : '-> 'Ccell.Mvar.t
  val read : 'Ccell.Mvar.t -> 'Ccell.Event.event
  val take : 'Ccell.Mvar.t -> 'Ccell.Event.event
  val put : 'Ccell.Mvar.t -> '-> unit Ccell.Event.event
  val replace : 'Ccell.Mvar.t -> ('-> 'a) -> unit Ccell.Event.event
end