functor (R : T->
  sig
    type t = R.t array
    val length : Ring.Polynomial.t -> int
    val degree : Ring.Polynomial.t -> int
    val eq : Ring.Polynomial.t -> Ring.Polynomial.t -> bool
    val compact : Ring.Polynomial.t -> Ring.Polynomial.t
    val coeff : Ring.Polynomial.t -> int -> R.t
    val init : int -> (int -> R.t) -> Ring.Polynomial.t
    val add : Ring.Polynomial.t -> Ring.Polynomial.t -> Ring.Polynomial.t
    val zero : 'a array
    val cmul : R.t -> Ring.Polynomial.t -> Ring.Polynomial.t
    val neg : Ring.Polynomial.t -> Ring.Polynomial.t
    val sub : Ring.Polynomial.t -> Ring.Polynomial.t -> Ring.Polynomial.t
    val mul : Ring.Polynomial.t -> Ring.Polynomial.t -> Ring.Polynomial.t
    val one : R.t array
    val to_string : Ring.Polynomial.t -> string
    val monomial : R.t -> int -> R.t array
  end