A hash-heap is a combination of a heap and a hashtable that supports constant time lookup, and log(n) time removal and replacement of elements in addition to the normal heap operations.
module type Key = Hashtbl.Key
module type S : sig ... end
module Make : functor (Key : Key) -> S with module Key = Key