sig
  type 'a t
  val create : unit -> 'Async.Std.Ivar.t
  val read : 'Async.Std.Ivar.t -> 'Async.Std.Deferred.t
  val fill : 'Async.Std.Ivar.t -> '-> unit
  val fill_if_empty : 'Async.Std.Ivar.t -> '-> unit
  val is_full : 'Async.Std.Ivar.t -> bool
  val is_empty : 'Async.Std.Ivar.t -> bool
end