functor (R : Linear.Ring->
  sig
    type t
    type dim = int
    type scalar = R.t
    val equal : t -> t -> bool
    val add : t -> t -> t
    val scalar_mul : scalar -> t -> t
    val negate : t -> t
    val sub : t -> t -> t
    val dot : t -> t -> scalar
    val zero : t
    val is_zero : t -> bool
    val add_term : scalar -> dim -> t -> t
    val of_term : scalar -> dim -> t
    val enum : t -> (scalar * dim) BatEnum.t
    val of_enum : (scalar * dim) BatEnum.t -> t
    val of_list : (scalar * dim) list -> t
    val coeff : dim -> t -> scalar
    val pivot : dim -> t -> scalar * t
    val order : t -> int
    val mul : t -> t -> t
    val one : t
    val scalar : scalar -> t
    val compose : t -> t -> t
    val identity : t
    val eval : t -> scalar -> scalar
    val exp : t -> int -> t
  end