functor (R : Rat->
  sig
    type t = R.q
    val euclid :
      Euclid.S.t -> Euclid.S.t -> Euclid.S.t * Euclid.S.t * Euclid.S.t
    val solve :
      Euclid.S.t list -> Euclid.S.t -> (Euclid.S.t * Euclid.S.t list) option
  end