dbenbenn: > On Dec 21, 2007 12:02 PM, Don Stewart <[EMAIL PROTECTED]> wrote: > > There's no good reason for the accumulator for Integer to be lazy, > > especially when you see that adding an upper bound (enumFromTo) or > > using Int uses a strict accumulator. > > > > I've filled a bug report and fix for this. > > > > http://hackage.haskell.org/trac/ghc/ticket/1997 > > > > there's an ad hoc sprinkling of strict and lazy Num ops for Integer > > through the base library, while Int is fairly consistently strict. > > Thanks for fixing this. But doesn't GHC have strictness analysis? Sure does!
> Even if there was consistent strictness for Integer in the base > library, that wouldn't help for code not in the base library. In > other words, I want to be able to define > > mysum :: (Num a) => [a] -> a > mysum = foldl (+) 0 > > in my own programs, and have GHC automatically make it strict if "a" > happens to be Int or Integer. Is there any chance of GHC getting that > ability? Thankfully, GHC does that already :) mysum :: (Num a) => [a] -> a mysum = foldl (+) 0 main = print (mysum [1..10000000]) In ghc 6.6, $ time ./A +RTS -M20M Heap exhausted; Current maximum heap size is 19996672 bytes (19 Mb); use `+RTS -M<size>' to increase it. and in GHC 6.8, ghc can see through to the strictness of (+) $ time ./A +RTS -M20M 50000005000000 ./A +RTS -M20M 0.95s user 0.00s system 99% cpu 0.959 total The problem here was an explicit recusive loop though, with just not enough for the strictness analyser to get going. -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe