From: Daniel Fischer Date: Thu, 21 Oct 2010 09:32:46 +0000 (+0000) Subject: FIX #4336 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=b2f76d1e62488565e470ffc24551090c83f66ee5;p=ghc-base.git FIX #4336 Avoid superfluous gcd calculation in recip for Ratio a because numerator and denominator are known to be coprime. --- diff --git a/GHC/Real.lhs b/GHC/Real.lhs index 971f276..4c2ed45 100644 --- a/GHC/Real.lhs +++ b/GHC/Real.lhs @@ -331,7 +331,10 @@ instance (Integral a) => Num (Ratio a) where instance (Integral a) => Fractional (Ratio a) where {-# SPECIALIZE instance Fractional Rational #-} (x:%y) / (x':%y') = (x*y') % (y*x') - recip (x:%y) = y % x + recip (0:%_) = error "Ratio.%: zero denominator" + recip (x:%y) + | x < 0 = negate y :% negate x + | otherwise = y :% x fromRational (x:%y) = fromInteger x :% fromInteger y instance (Integral a) => Real (Ratio a) where