Daniel Fischer <daniel.is.fisc...@web.de> writes: > Am Mittwoch 10 März 2010 22:33:43 schrieb TeXitoi: > > After programming as an exercice the sum function, my version is > > faster than the Data.List's version. Looking at the source code, > > Data.List uses a foldl and not a foldl'. foldl' seems faster and > > allows to use very big lists. So, why is foldl used by Data.List for > > sum? > > Because Haskell is a non-strict language, and foldl' is strict -- someone > might write a (legitimate) Num instance for a datatype such that > > foldl (+) 0 xs > > returns a good value, but > > foldl' (+) 0 xs > > gives > > ***Exception: Prelude.undefined > > for some lists xs. > Since Haskell is non-strict, sum xs should give a good value then.
Yeah, I see. I've thought at that looking the comment of maximum. > However, with optimisations turned on, for the standard Num instances, GHC > knows that sum is actually strict and produces code as if sum were defined > using foldl'. OK, good to know. > Depending on how you timed the functions, there are several ways how you > could have obtained your result without there being an actual difference > between your implementation and the library's for Int, Integer, ... In ghci, that's explain the non optimized version. Same result without any option to ghc. I have similar performances between sum and foldl' (+) 0 with ghc -O2. Thanks for the explainations. -- Guillaume Pinot http://www.irccyn.ec-nantes.fr/~pinot/ « Les grandes personnes ne comprennent jamais rien toutes seules, et c'est fatigant, pour les enfants, de toujours leur donner des explications... » -- Antoine de Saint-Exupéry, Le Petit Prince () ASCII ribbon campaign -- Against HTML e-mail /\ http://www.asciiribbon.org -- Against proprietary attachments _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe