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