sig
  module type M =
    sig
      type t
      val compare : Scalar.M.t -> Scalar.M.t -> int
      val zero : Scalar.M.t
      val one : Scalar.M.t
      val of_float : float -> Scalar.M.t
      val to_float : Scalar.M.t -> float
      val of_q : Q.t -> Scalar.M.t
      val to_q : Scalar.M.t -> Q.t
      val add : Scalar.M.t -> Scalar.M.t -> Scalar.M.t
      val sub : Scalar.M.t -> Scalar.M.t -> Scalar.M.t
      val mult : Scalar.M.t -> Scalar.M.t -> Scalar.M.t
      val div : Scalar.M.t -> Scalar.M.t -> Scalar.M.t
      val pp : Stdlib.Format.formatter -> Scalar.M.t -> unit
    end
  module type S =
    sig
      type t
      val compare : t -> t -> int
      val zero : t
      val one : t
      val of_float : float -> t
      val to_float : t -> float
      val of_q : Q.t -> t
      val to_q : t -> Q.t
      val add : t -> t -> t
      val sub : t -> t -> t
      val mult : t -> t -> t
      val div : t -> t -> t
      val pp : Format.formatter -> t -> unit
      val minus_one : t
      val of_int : int -> t
      val neg : t -> t
      val inv : t -> t
      val equal : t -> t -> bool
      val leq : t -> t -> bool
      val geq : t -> t -> bool
      val lt : t -> t -> bool
      val gt : t -> t -> bool
      val sign : t -> int
      val ( ~- ) : t -> t
      val ( + ) : t -> t -> t
      val ( - ) : t -> t -> t
      val ( * ) : t -> t -> t
      val ( / ) : t -> t -> t
      val ( = ) : t -> t -> bool
      val ( <> ) : t -> t -> bool
      val ( <= ) : t -> t -> bool
      val ( >= ) : t -> t -> bool
      val ( < ) : t -> t -> bool
      val ( > ) : t -> t -> bool
    end
  module Make :
    functor (M : M->
      sig
        type t = M.t
        val compare : t -> t -> int
        val zero : t
        val one : t
        val of_float : float -> t
        val to_float : t -> float
        val of_q : Q.t -> t
        val to_q : t -> Q.t
        val add : t -> t -> t
        val sub : t -> t -> t
        val mult : t -> t -> t
        val div : t -> t -> t
        val pp : Format.formatter -> t -> unit
        val minus_one : t
        val of_int : int -> t
        val neg : t -> t
        val inv : t -> t
        val equal : t -> t -> bool
        val leq : t -> t -> bool
        val geq : t -> t -> bool
        val lt : t -> t -> bool
        val gt : t -> t -> bool
        val sign : t -> int
        val ( ~- ) : t -> t
        val ( + ) : t -> t -> t
        val ( - ) : t -> t -> t
        val ( * ) : t -> t -> t
        val ( / ) : t -> t -> t
        val ( = ) : t -> t -> bool
        val ( <> ) : t -> t -> bool
        val ( <= ) : t -> t -> bool
        val ( >= ) : t -> t -> bool
        val ( < ) : t -> t -> bool
        val ( > ) : t -> t -> bool
      end
  module Q :
    sig
      type t = Q.t
      val compare : t -> t -> int
      val zero : t
      val one : t
      val of_float : float -> t
      val to_float : t -> float
      val of_q : Q.t -> t
      val to_q : t -> Q.t
      val add : t -> t -> t
      val sub : t -> t -> t
      val mult : t -> t -> t
      val div : t -> t -> t
      val pp : Format.formatter -> t -> unit
      val minus_one : t
      val of_int : int -> t
      val neg : t -> t
      val inv : t -> t
      val equal : t -> t -> bool
      val leq : t -> t -> bool
      val geq : t -> t -> bool
      val lt : t -> t -> bool
      val gt : t -> t -> bool
      val sign : t -> int
      val ( ~- ) : t -> t
      val ( + ) : t -> t -> t
      val ( - ) : t -> t -> t
      val ( * ) : t -> t -> t
      val ( / ) : t -> t -> t
      val ( = ) : t -> t -> bool
      val ( <> ) : t -> t -> bool
      val ( <= ) : t -> t -> bool
      val ( >= ) : t -> t -> bool
      val ( < ) : t -> t -> bool
      val ( > ) : t -> t -> bool
    end
  module Float :
    sig
      type t = float
      val compare : t -> t -> int
      val zero : t
      val one : t
      val of_float : float -> t
      val to_float : t -> float
      val of_q : Q.t -> t
      val to_q : t -> Q.t
      val add : t -> t -> t
      val sub : t -> t -> t
      val mult : t -> t -> t
      val div : t -> t -> t
      val pp : Format.formatter -> t -> unit
      val minus_one : t
      val of_int : int -> t
      val neg : t -> t
      val inv : t -> t
      val equal : t -> t -> bool
      val leq : t -> t -> bool
      val geq : t -> t -> bool
      val lt : t -> t -> bool
      val gt : t -> t -> bool
      val sign : t -> int
      val ( ~- ) : t -> t
      val ( + ) : t -> t -> t
      val ( - ) : t -> t -> t
      val ( * ) : t -> t -> t
      val ( / ) : t -> t -> t
      val ( = ) : t -> t -> bool
      val ( <> ) : t -> t -> bool
      val ( <= ) : t -> t -> bool
      val ( >= ) : t -> t -> bool
      val ( < ) : t -> t -> bool
      val ( > ) : t -> t -> bool
    end
end