Nathan van Doorn

2018-06-14 10:37:24 UTC

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.

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.