module Pqueue: Pqueue
module type OrderedType =sig
..end
Input signature of the functors Pqueue.MakeMin
and Pqueue.MakeMax
.
module type Min =sig
..end
Output signature of the functor Pqueue.MakeMin
.
module MakeMin:
Functor building an implementation of the min-priority queue structure given a totally ordered type for elements.
module type Max =sig
..end
Output signature of the functor Pqueue.MakeMax
.
module MakeMax:
Functor building an implementation of the max-priority queue structure given a totally ordered type for elements.
The following, more complex functors create polymorphic queues of
type 'a t
, just like other polymorphic containers (lists,
arrays...). They require a notion of "polymorphic elements" 'a
that can be compared without depending on the values of
elt'a
.
One usage scenario is when the user wants to pass priorities
separately from the value stored in the queue. This is done by
using pairs priority * 'a
as elements.
module Prio : OrderedType = ...
module PrioQueue = Pqueue.MakeMinPoly(struct
type 'a t = Prio.t * 'a
let compare (p1, _) (p2, _) = Prio.compare p1 p2
end)
(* for example, we now have: *)
PrioQueue.add: 'a PrioQueue.t -> Prio.t * 'a -> unit
PrioQueue.min_elt: 'a PrioQueue.t -> (Prio.t * 'a) option
module type OrderedPolyType =sig
..end
Input signature of the functors Pqueue.MakeMinPoly
and Pqueue.MakeMaxPoly
.
module type MinPoly =sig
..end
Output signature of the functor Pqueue.MakeMinPoly
.
module MakeMinPoly:
Functor building an implementation of min-priority queues given a totally ordered type for the elements.
module type MaxPoly =sig
..end
Output signature of the functor Pqueue.MakeMaxPoly
.
module MakeMaxPoly:
Functor building an implementation of max-priority queues given a totally ordered type for the elements.