sig
  type t
  type elt
  type 'a elt_ = elt
  type 'a heap = t
  val empty : 'a heap
  val is_empty : 'a heap -> bool
  val singleton : 'a elt_ -> 'a heap
  val insert : 'a elt_ -> 'a heap -> 'a heap
  val merge : 'a heap -> 'a heap -> 'a heap
  val find_min : 'a heap -> 'a elt_
  val delete_min : 'a heap -> 'a heap
  val to_string : 'a heap -> string
end