Symmetric difference for Set and IntSet

David Feuer david.feuer at
Fri Jun 26 17:27:14 UTC 2020

Map merges can do even more, because they work with arbitrary Applicative
functors. So a functor like

    data Triple a = Triple a a a
    instance Applicative Triple where
      pure a = Triple a a a
      liftA2 f (Triple x y z) (Triple p q r) = Triple (f x p) (f y q) (f z

can be used to calculate union, intersection, *and* symmetric difference
all in one go. I should just bite the bullet and implement that for sets.

On Fri, Jun 26, 2020, 1:16 PM Andrew Lelechenko <andrew.lelechenko at>

> On 18 Jun 2020, at 23:42, Bardur Arantsson <spam at> wrote:
> > I think it's probably going to be useful, but I would suggest an
> > algorithm which actually returns each of the terms here (as a tuple),
> i.e.
> >
> >   The "added" bits
> >   The "removed" bits
> >   The "common" bits
> >
> > This may not be *that* useful for sets per se, but I've lost count of
> > how often I've had to implement a similar thing for maps.
> This is probably orthogonal to my proposal here, because it does not
> improve the performance of symmetricDifference. Maps are more flexible in
> this aspect, because there are merge tactics, which allow to encode any set
> operation.
> Best regards,
> Andrew
> _______________________________________________
> Libraries mailing list
> Libraries at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list