This seems very interesting. One question:
> The MonadPlus and the Alternative instance differ: the former's mplus
> combinator equals the asymmetric <<|> choice.
Why?
Good question. Basically, I see MonadPlus as a union of Monad and Alternative. The class should not exist at all. But as long as it does, I figured I should provide an instance, and I made it different from the Monoid+Alternative combination because otherwise it would be useless. My second choice would be to remove the instance completely.