From: Bart Massey Date: Sat, 26 Jul 2008 08:04:44 +0000 (+0000) Subject: applied patches to make enumFrom and friends strict in arguments as per the Report... X-Git-Tag: 6_10_branch_has_been_forked~117 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=e007a7cad7f402caaedacf1933e38b55d744ac4b;p=ghc-base.git applied patches to make enumFrom and friends strict in arguments as per the Report; closes ticket #1997 --- diff --git a/GHC/Num.lhs b/GHC/Num.lhs index 46cc03d..c92d03e 100644 --- a/GHC/Num.lhs +++ b/GHC/Num.lhs @@ -282,10 +282,13 @@ instance Enum Integer where #-} enumDeltaIntegerFB :: (Integer -> b -> b) -> Integer -> Integer -> b -enumDeltaIntegerFB c x d = x `c` enumDeltaIntegerFB c (x+d) d +enumDeltaIntegerFB c x d = x `seq` (x `c` enumDeltaIntegerFB c (x+d) d) enumDeltaInteger :: Integer -> Integer -> [Integer] -enumDeltaInteger x d = x : enumDeltaInteger (x+d) d +enumDeltaInteger x d = x `seq` x : enumDeltaInteger (x+d) d + -- strict accumulator, as for Int + -- so, head (drop 1000000 [1 .. ] works + -- patch by Don Stewart enumDeltaToIntegerFB c n x delta lim | delta >= 0 = up_fb c n x delta lim diff --git a/GHC/Real.lhs b/GHC/Real.lhs index d282058..6d1f6e0 100644 --- a/GHC/Real.lhs +++ b/GHC/Real.lhs @@ -201,10 +201,10 @@ These 'numeric' enumerations come straight from the Report \begin{code} numericEnumFrom :: (Fractional a) => a -> [a] -numericEnumFrom = iterate (+1) +numericEnumFrom n = numericEnumFromThen n (n + 1) numericEnumFromThen :: (Fractional a) => a -> a -> [a] -numericEnumFromThen n m = iterate (+(m-n)) n +numericEnumFromThen n m = n `seq` m `seq` n : numericEnumFromThen m (m+m-n) numericEnumFromTo :: (Ord a, Fractional a) => a -> a -> [a] numericEnumFromTo n m = takeWhile (<= m + 1/2) (numericEnumFrom n)