And isn't it better for the Rational constructor to simplify the arguments (calling an optimized GCD)? See this implementation (that doesn't use an optimized GCD): http://rosettacode.org/wiki/Arithmetic/Rational#D Bye, bearophile