[Haskell-cafe] Re: definition of sum
texitoi at texitoi.eu
Wed Mar 10 17:45:59 EST 2010
Daniel Fischer <daniel.is.fischer at 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
> ***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
More information about the Haskell-Cafe