sig
  module type Comparable =
    sig
      type t
      val equal : Utils.Comparable.t -> Utils.Comparable.t -> bool
      val compare : Utils.Comparable.t -> Utils.Comparable.t -> int
      val hash : Utils.Comparable.t -> int
    end
  module Int :
    sig
      type t = int
      val equal : t -> t -> bool
      val compare : t -> t -> int
      val hash : t -> int
    end
  module Float :
    sig
      type t = float
      val equal : t -> t -> bool
      val compare : t -> t -> int
      val hash : t -> int
      val set_precision : float -> unit
      val round : t -> int
    end
end