From 8827985d7ce902bfc916e4168049c9a46a1d7fe8 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 20 Nov 2008 10:18:26 +0000 Subject: [PATCH] re-instate the gcd/Integer and lcm/Integer RULES Fixes a performance regression between 6.8.3 and 6.10.1 --- GHC/Real.lhs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/GHC/Real.lhs b/GHC/Real.lhs index 287454e..da6053e 100644 --- a/GHC/Real.lhs +++ b/GHC/Real.lhs @@ -449,16 +449,16 @@ lcm x y = abs ((x `quot` (gcd x y)) * y) {-# RULES "gcd/Int->Int->Int" gcd = gcdInt +"gcd/Integer->Integer->Integer" gcd = gcdInteger' +"lcm/Integer->Integer->Integer" lcm = lcmInteger #-} --- XXX these optimisation rules are disabled for now to make it easier --- to experiment with other Integer implementations --- "gcd/Integer->Integer->Integer" gcd = gcdInteger' --- "lcm/Integer->Integer->Integer" lcm = lcmInteger +-- XXX to use another Integer implementation, you might need to disable +-- the gcd/Integer and lcm/Integer RULES above -- --- gcdInteger' :: Integer -> Integer -> Integer --- gcdInteger' 0 0 = error "GHC.Real.gcdInteger': gcd 0 0 is undefined" --- gcdInteger' a b = gcdInteger a b +gcdInteger' :: Integer -> Integer -> Integer +gcdInteger' 0 0 = error "GHC.Real.gcdInteger': gcd 0 0 is undefined" +gcdInteger' a b = gcdInteger a b integralEnumFrom :: (Integral a, Bounded a) => a -> [a] integralEnumFrom n = map fromInteger [toInteger n .. toInteger (maxBound `asTypeOf` n)] -- 1.7.10.4