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