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