sig
  module Make :
    functor (Num : Bounding_box_intf.Numeric_S->
      sig
        module Num :
          sig
            type t = Num.t
            val zero : t
            val ( + ) : t -> t -> t
            val ( - ) : t -> t -> t
            val ( * ) : t -> t -> t
            val ( >= ) : t -> t -> bool
            val min : t -> t -> t
            val max : t -> t -> t
            val abs : t -> t
          end
        type a = Num.t
        type c = a * a
        type t = c * c
        val empty : t
        val area : t -> a
        val overlaps : t -> t -> bool
        val union : t -> t -> t
        val union_many : t list -> t
        val delta : t -> t -> a
        val distance : t -> t -> a
      end
  module Num :
    sig
      type t = float
      val zero : t
      val ( + ) : t -> t -> t
      val ( - ) : t -> t -> t
      val ( * ) : t -> t -> t
      val ( >= ) : t -> t -> bool
      val min : t -> t -> t
      val max : t -> t -> t
      val abs : t -> t
    end
  type a = Bounding_box.Num.t
  type c = Bounding_box.a * Bounding_box.a
  type t = Bounding_box.c * Bounding_box.c
  val empty : Bounding_box.t
  val area : Bounding_box.t -> Bounding_box.a
  val overlaps : Bounding_box.t -> Bounding_box.t -> bool
  val union : Bounding_box.t -> Bounding_box.t -> Bounding_box.t
  val union_many : Bounding_box.t list -> Bounding_box.t
  val delta : Bounding_box.t -> Bounding_box.t -> Bounding_box.a
  val distance : Bounding_box.t -> Bounding_box.t -> Bounding_box.a
end