(<?>) :: [a] -> [a] -> [a]  <?> ys = ys xs <?> _ = xs
This is an associative operation, of course, and the empty list
 is both left- and right-identity. It functions like Python's
It seems to me that this would make a nice
(<|>), better than
(++) would. Choosing the first nonempty list feels more like what I would expect from a typeclass named
Alternative than concatenating lists. Admittedly, it doesn't fit
MonadPlus as well, but I think that a small price to pay for salvation. We already have
(<>) in the standard library; do we need another synonym, or would a new function (as far as I can tell) be more helpful?
I was at first thinking this might be a good
Alternative instance for
ZipList, but the discussion following this answer on the relevant question has convinced me otherwise. Other than backwards-compatibility and keeping
MonadPlus sensible, what arguments are there for the current instance rather than this new one?