Data.Foldable.foldr1 too strict

Bertram Felgenhauer bertram.felgenhauer at googlemail.com
Thu Sep 27 17:36:00 CEST 2012


Dan Doel wrote:
> On Thu, Sep 27, 2012 at 10:09 AM, Brent Yorgey <byorgey at seas.upenn.edu> wrote:
> > Isn't that still too strict?  I would expect to see "abcdef" before
> > the exception.
> 
> No, even foldr1 as hand-written on lists needs to look ahead. Normally
> it looks like:
> 
>     foldr1 f [x] = x
>     foldr1 f (x:xs) = f x (foldr1 xs)
> 
[...]
> Where it's [more] obvious that it will hit the bottom before it can
> yield the "def".

But we could define

  foldr1 f (x:xs) = foldr f x xs

which would be more lazy. I see no advantage to defining foldr1 as
in the standard library, am I missing anything?

Bertram



More information about the Libraries mailing list