sig
  module type T =
    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 * '-> 'a) -> '-> 'Cf_pqueue.T.t -> 'a
      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
end