FIX #4336
authorDaniel Fischer <daniel.is.fischer@web.de>
Thu, 21 Oct 2010 09:32:46 +0000 (09:32 +0000)
committerDaniel Fischer <daniel.is.fischer@web.de>
Thu, 21 Oct 2010 09:32:46 +0000 (09:32 +0000)
Avoid superfluous gcd calculation in recip for Ratio a because numerator
and denominator are known to be coprime.

GHC/Real.lhs

index 971f276..4c2ed45 100644 (file)
@@ -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