[Haskell-cafe] List instance of Alternative: why (++)?

Chris Smith cdsmith at gmail.com
Sun May 28 16:11:12 UTC 2017

```My understanding of the proposed instance was that if xs >>= f is [], then
(xs >>= f) | (ys >>= f) would be ys >>= f.  That may not necessarily be
empty.

Consider:

f 42 = [42]
f _ = []

xs = [1,2,3]
ys = [42]

On Sun, May 28, 2017 at 12:24 AM, Damian Nadales <damian.nadales at gmail.com>
wrote:

> > It's hard to look at laws, because there's apparently little agreement on
> > the proper laws for Alternative.  It looks possible that as an
> Applicative
> > and Alternative, this would be fine; but the Alternative instance you
> > propose would work in odd ways with the Monad instance.  That is, if f x
> ==
> > [] for any x in (non-empty) xs, then something like (xs <|> ys) >>= f
> would
> > yield an empty list, while (xs >>= f) <|> (ys >>= f) would not.  But,
> this
>
> In this case `(xs >>= f) <|> (ys >>= f)` will also be empty as far as
> I can see...
>
> I'm also trying to make some sense out of this definition of
> alternative for lists. For `Maybe` we also have a left biased
> alternative, and despite this I find it quite useful...
>
> > isn't a law or anything, you could chalk it up as counter-intuitive, but
> not
> > disqualifying.
> >
> > On Fri, May 5, 2017 at 11:12 PM, Theodore Lief Gannon <tanuki at gmail.com>
> > wrote:
> >>
> >> Fiddling around, I found myself wanting:
> >>
> >> coalesce :: [a] -> [a] -> [a]
> >> -- or -- :: (Foldable t) => t a -> t a -> t a
> >> coalesce a b = if null a then b else a
> >>
> >> I expected this to be (<|>) (it is for Maybe!) but instead I find no
> >> canonical implementation of it anywhere, and what seems like a useless
> >> instance Alternative []. What's the rationale?
> >>
> >> _______________________________________________
> >> To (un)subscribe, modify options or view archives go to:
> >> Only members subscribed via the mailman list are allowed to post.
> >
> >
> >
> > _______________________________________________