Proposal: add:
instance Monoid e => Alternative (Either e) where
empty = Left mempty
Left a <|> Left b = Left (a `mappend` b)
Right a <|> _ = Right a
_ <|> Right b = Right b
instance Monoid e => MonadPlus (Either e) where
...
to base.
This is a reasonably obvious instance which I am pretty sure is law abiding.
It'd be useful for defining a series of computations which may fail, where we only care about one success.