
Hi Andreas,
Well, we still made the decision to have a similarly arbitrary
instance for `Maybe`, so I thought that instance might be justified
too.
My use case: I'm traversing terms and I want to either collect
meta-variables, or fail. So I'd like to use `Either Error
MetaVariables` to automatically handle the merging of results for
subterms. In the end I defined my own type:
https://github.com/bitonic/tog/blob/master/src/Data/Collect.hs.
Francesco
On 27 November 2014 at 18:45, Andreas Abel
Hi Francesco,
maybe you should add the use cases you have in mind, to strengthen your case.
A priori, it is not clear why an error-propagating monoid should be preferred over an error-correcting one. (Both seem useful.) Your proposal has the flavor of "All" whereas the Semigroup one corresponds to "Any".
Personally, I think neither of the alternatives is sufficiently canonical (both versions throw away information), thus, there shouldn't be instances (also not for Semigroup).
Cheers, Andreas
On 27.11.2014 18:29, Francesco Mazzoli wrote:
Hi,
Lately, I found myself wanting to use the following Monoid instance:
```` instance (Monoid b) => Monoid (Either a b) where mempty = Right mempty
Left e `mappend` _ = Left e _ `mappend` Left e = Left e Right x `mappend` Right y = Right (x `mappend` y) ````
It would seem quite justified to me, given the left-bias of Either elsewhere in base. Is there any particular reason why it shouldn't be defined?
It would break the instance for Either in `semigroups`, which is
```` instance Semigroup (Either a b) where Left _ <> b = b a <> _ = a ````
But I think mine is more useful, and has the additional advantage of having `mappend` to behave very similar to the `mappend` for `Maybe`.
Francesco _______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
-- Andreas Abel <>< Du bist der geliebte Mensch.
Department of Computer Science and Engineering Chalmers and Gothenburg University, Sweden
andreas.abel@gu.se http://www2.tcs.ifi.lmu.de/~abel/