functor (Ord : OrderedType->
  sig
    type elt = Ord.t
    type t
    val create : unit -> t
    val add : elt -> t -> unit
    val take : ?timeout:float -> t -> elt Lwt.t
    val size : t -> int
    val fold : ('-> elt -> 'a) -> '-> t -> 'a
  end