Alternative instance for Either

Chris Wong lambda.fairy at gmail.com
Fri Jun 15 23:44:37 UTC 2018


I think the iffy feeling comes from the proposal breaking the distributive
law. For example:

(Right f <|> Right g) <*> Left x
  = Left x

but

(Right f <*> Left x) <|> (Right g <*> Left x)
  = Left (x <> x)

On Thu, Jun 14, 2018, 22:42 Tony Morris <tonymorris at gmail.com> wrote:

> Alternatively :) or more like, something to think about, an Alt instance
> for Either.
>
> class Alt f where
>   (<!>) :: f a -> f a -> f a
>
> instance Alt Either where
>   Right b <!> _ = Right b
>   Left a <!> x = x
>
>
> https://hackage.haskell.org/package/semigroupoids/docs/Data-Functor-Alt.html
>
> There is something iffy about Monoid e => Alternative (Either e) but I
> can't put my finger on it.
>
> On 06/14/2018 08:37 PM, Nathan van Doorn wrote:
>
> 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.
>
>
> _______________________________________________
> Libraries mailing listLibraries at haskell.orghttp://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20180616/a401a110/attachment.html>


More information about the Libraries mailing list