sig
  type t
  module Element : sig type t end
  val nil : Cf_heap.T.t
  val empty : Cf_heap.T.t -> bool
  val size : Cf_heap.T.t -> int
  val head : Cf_heap.T.t -> Cf_heap.T.Element.t
  val tail : Cf_heap.T.t -> Cf_heap.T.t
  val pop : Cf_heap.T.t -> (Cf_heap.T.Element.t * Cf_heap.T.t) option
  val put : Cf_heap.T.Element.t -> Cf_heap.T.t -> Cf_heap.T.t
  val merge : Cf_heap.T.t -> Cf_heap.T.t -> Cf_heap.T.t
  val iterate : (Cf_heap.T.Element.t -> unit) -> Cf_heap.T.t -> unit
  val predicate : (Cf_heap.T.Element.t -> bool) -> Cf_heap.T.t -> bool
  val fold : ('-> Cf_heap.T.Element.t -> 'b) -> '-> Cf_heap.T.t -> 'b
  val filter : (Cf_heap.T.Element.t -> bool) -> Cf_heap.T.t -> Cf_heap.T.t
  val partition :
    (Cf_heap.T.Element.t -> bool) -> Cf_heap.T.t -> Cf_heap.T.t * Cf_heap.T.t
  val of_seq : Cf_heap.T.Element.t Cf_seq.t -> Cf_heap.T.t
  val of_list : Cf_heap.T.Element.t list -> Cf_heap.T.t
  val to_seq : Cf_heap.T.t -> Cf_heap.T.Element.t Cf_seq.t
  val to_seq2 : Cf_heap.T.t -> (Cf_heap.T.Element.t * Cf_heap.T.t) Cf_seq.t
end