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