<p dir="ltr">Regarding (2), I was thinking about situations where sharing is an issue. Even if == is the right equality, you may want to settle on a single copy. That would also suggest a version of member that returns a Maybe instead of a Bool.</p>
<div class="gmail_quote">On Mar 6, 2015 3:42 AM, "Joachim Breitner" <<a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
<br>
Am Donnerstag, den 05.03.2015, 17:59 -0500 schrieb David Feuer:<br>
> 1. A way to take the intersection of a list of sets. This shouldn't<br>
> really be a big deal, and it already exists for unions, but the<br>
> intersection version should probably sort the sets by size before<br>
> folding, or otherwise try to do something smart.<br>
<br>
+1<br>
<br>
> 2. A way to insert an element if an == one is not already present<br>
> (insert replaces an existing one with a new one). Currently, as far as<br>
> I can tell, this can only be done using either<br>
><br>
>   if e `member` s then s else insert e s<br>
> which potentially descends the tree twice for no reason<br>
><br>
> or<br>
><br>
>   s `union` singleton e<br>
><br>
> which is documented as being O(|s|+1), although I wouldn't be shocked<br>
> if the documentation were too pessimistic in this case.<br>
<br>
I’m doubtful about that one.<br>
<br>
This is only needed if == is not „the right equality“, in which case a<br>
Set might be the wrong data type. Do we want to advocate that style?<br>
<br>
Also, it will make everyone wonder „do I need insert or theOtherInsert“,<br>
making the API a bit less concise and quick to grasp.<br>
<br>
Since "s `union` singleton e" does the right thing with almost the right<br>
performance, maybe that’s sufficient?<br>
<br>
> 3. A way to delete an element and simultaneously find out whether it<br>
> was in the set.<br>
<br>
+1, possibly with the type<br>
        a -> Set a -> Maybe (a, Set a)<br>
to get the remaining set as well.<br>
<br>
Greetings,<br>
Joachim<br>
<br>
<br>
<br>
<br>
--<br>
Joachim “nomeata” Breitner<br>
  <a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a> • <a href="http://www.joachim-breitner.de/" target="_blank">http://www.joachim-breitner.de/</a><br>
  Jabber: <a href="mailto:nomeata@joachim-breitner.de">nomeata@joachim-breitner.de</a>  • GPG-Key: 0xF0FBF51F<br>
  Debian Developer: <a href="mailto:nomeata@debian.org">nomeata@debian.org</a><br>
<br>_______________________________________________<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" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
<br></blockquote></div>