[Haskell-cafe] definition of sum
Daniel Fischer
daniel.is.fischer at web.de
Wed Mar 10 16:50:18 EST 2010
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.
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'.
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, ...
More information about the Haskell-Cafe
mailing list