sig
  module type T =
    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
end