[Haskell-cafe] Data.Foldable.all and empty list

Tikhon Jelvis tikhon at jelv.is
Tue Sep 29 21:43:02 UTC 2015

It's intentional. The behavior makes sense (although it's a bit unintuitive
at first) and follows common mathematical convention.

For one, it makes sense logically: it is vacuously true that every element
of an empty list satisfies any predicate. That's how forall works normally.
Think about it by analogy to implication: false implies anything (ie False
-> a is true no matter what a is).

It also makes sense when looking at these as a fold: the folding operation
is && and True is the identity element for &&. In a broad sense, True is
naturally the "empty" case for && so that's where we start from. It's the
same for say sum (an empty sum is 0) and product (an empty product is 1).

>From a practical standpoint, this default neatly avoids a bunch of special
cases, meaning we don't have to check if a list is empty before aggregating
it. It's something that's worth understanding and relying in because it
makes your code simpler and more regular.
On Sep 29, 2015 14:33, "Lana Black" <lanablack at amok.cc> wrote:

> Hello,
> Is there any particular reason why the 'all' function returns True when
> supplied with an empty list (or any other foldable)? I'm aware that it
> is implemented via All monoid instance, my question is whether this
> behaviour is intentional or it can be considered a bug.
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150929/ca399a41/attachment.html>

More information about the Haskell-Cafe mailing list