generalize type of Data.Set.unions from List to Foldable

Jan-Willem Maessen jmaessen at
Mon Feb 5 14:46:16 UTC 2018

The biggest argument in favor of unions and unionsWith is that, while
they're easy to write, they're also very easy to write wrong – for example
by using fold instead of foldl' as described rather well in the
conversation so far.  When I use a function like unions I expect to get an
implementation better than the one I'd come up with on my own at the spur
of the moment, and deciding what strictness is more efficient in this case
is actually a little bit subtle.

-Jan-Willem Maessen

On Sun, Feb 4, 2018 at 3:09 PM, Joachim Breitner <mail at>

> Hi,
> Am Samstag, den 03.02.2018, 20:44 -0500 schrieb David Feuer:
> > It is fold, although fold is not so great for lists in this context.
> It's also foldl' union Set.empty, which is better for lists, and probably
> also for balanced trees. I initially thought that we should surely
> generalize, but now another alternative comes to mind: remove. As a
> containers maintainer, I believe we should either:
> >
> > 1. Generalize as proposed, or
> > 2. Deprecate and remove.
> >
> > I'm currently somewhat in favor of the second option.
> please don’t remove!
> …is first reaction. Now I just have to rationalize my gut feeling…
> I like the readability of it in code, it is more descriptive. It is an
> important analogue to unionsWith. If we remove unions because of fold,
> shouldn’t we also remove union because of (<>)?
> Cheers,
> Joachim
> --
> Joachim Breitner
>   mail at
> _______________________________________________
> Libraries mailing list
> Libraries at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list