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?