functor (Ord : ORD->
  sig
    type 'a t
    type key = Ord.t
    exception Empty
    val create : unit -> 'a t
    val clear : 'a t -> unit
    val is_empty : 'a t -> bool
    val top : 'a t -> 'a
    val pop : 'a t -> 'a
    val push : key -> '-> 'a t -> unit
    val string_of : ('-> string) -> 'a t -> string
  end