<p dir="ltr">Consider them severed. I'm most interested in getting generalMerge settled. I can leave the question of what to do with mergeWithKey alone for a while.</p>
<div class="gmail_extra"><br><div class="gmail_quote">On Aug 19, 2016 12:59 AM, "Bardur Arantsson" <<a href="mailto:spam@scientician.net">spam@scientician.net</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">On 2016-08-18 22:40, David Feuer wrote:<br>
> I like the idea of using separate modules. What would you like them to<br>
> be called?<br>
><br>
> I am open to the idea of leaving mergeWithKey in, but I'm not yet<br>
> convinced. Can you give an example of a realistic application of<br>
> mergeWithKey that cannot easily be rewritten in terms of generalMerge?<br>
> I would normally agree with you that backwards compatibility should be<br>
> preserved. However, mergeWithKey has several very serious problems.<br>
><br>
> 1. It allows the user to produce invalid maps. Unlike other functions<br>
> that do so, it's not clear that it offers any significant efficiency<br>
> benefit (once generalMerge is added).<br>
><br>
> 2. It breaks the map abstraction. A user could invoke mergeWithKey<br>
> with arguments that cause it to produce semantically different maps<br>
> depending on the way the given map is balanced. For example, a user<br>
> could pass an only1 function that deletes the median of the tree it is<br>
> passed. I don't know how to document the appropriate restrictions<br>
> required to preserve the abstraction.<br>
><br>
> 3. It is very hard to figure out much about what mergeWithKey does by<br>
> looking at its name and type. Indeed, I did not understand it from its<br>
> documentation either, and had to read the source code.<br>
><br>
<br>
</div>Maybe it would be better to de-copule this into two proposals, one for<br>
adding generalMerge (or whatever it ends up being called #bikeshed), and<br>
one for depracting/removing mergeWithKey?<br>
<div class="elided-text"><br>
<br>
______________________________<wbr>_________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/libraries</a><br>
</div></blockquote></div><br></div>