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