People, I wrote recently
> And now unneeded laziness bites. > [..] > In ghc-6.6, it needs at least 100 Mb of heap to perform. > If I set seq infoK' between `shows' and `p', then it suffices 14 Mb. > [..] > Now: how to program real problems in Haskell ? > Should I try to set seq everywhere and see whether it helps ? I am sorry. This was false alarm. I continued the investigation and have found that Haskell and GHC are NOT guilty in this example (uh! how good). This is the specifics of the method. Probably, one needs to think of seq only if one applies such a method with expenses depending heavily on the computation order. An interesting thing, though. The simplified and contrived example is --------------------------------------------------- main = putStr $ test 18 test :: Integer -> String test w = shows (f tM) "\n" where f = Prelude.minimum . map Prelude.minimum mM = makeMatrix w strictnessM = Prelude.minimum $ map Prelude.minimum mM tM = -- seq strictnessM $ transpose mM --------------------------------------------------- Here mM is n by n matrix of small integers, n = 385 for w = 18. The program prints f $ transpose mM. makeMatrix computes the rows of mM in a complex way, finding m(i,j) uses the table of m(i',j') for other pairs (i',j'). And the time and space costs depend heavily on the order in which m(i,j) are computed. Applying `transpose' changes (due to Haskell laziness) this order into more expensive one: 5 times more of heap needed. And adding `seq ...' before `transpose' returns it to initial order. So, everything is natural. Regards, ----------------- Serge Mechveliani [EMAIL PROTECTED] _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users