Am Donnerstag 11 März 2010 15:23:32 schrieb Yitzchak Gale: > TeXitoi wrote: > >> why is foldl used by Data.List for sum? > > Daniel Fischer wrote: > > 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. > > It is possible to define such a Num instance, but it is extremely rare > for anything like that to come up in practice. >
Yes. And I'd expect foldr (+) 0 to be much more useful for lazy Num instances than foldl (+) 0. Nevertheless, one has to take that possibility into account. > > However, with optimisations turned on... GHC knows that sum is > > actually strict > > GHC does that when optimizations are turned on, but that behavior > is not required by the Haskell standard. So there is no guarantee > that any given compiler will produce usable output if you use foldl > instead of foldl' for sum. > > In GHCi sum is broken, because optimizations are not in > effect there. You have to define your own version of sum > using foldl' for every GHCi session (or put it in your .ghci file). > > So it's a trade-off between a slight convenience in a bizarre > corner case and general usability. I agree with Don that this is > a bug in the Haskell 98 standard. I'm not sure whether it's a wart or a bug, but I agree that it would be better to have the default sum strict (and provide lazysum for the cases where it's useful). > > Regards, > Yitz Cheers, Daniel _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe