containers: symmetricDifference for Set and HashSet

Simon Jakobi simon.jakobi at googlemail.com
Tue Dec 1 09:33:56 UTC 2020


A few months ago we briefly discussed a function with a slightly different type:

symmetricDifference :: Set a -> Set a -> Set a
symmetricDifference x y = (x \\ y) <> (y \\ x)

See https://mail.haskell.org/pipermail/libraries/2020-June/030632.html.

Am Di., 1. Dez. 2020 um 10:19 Uhr schrieb David Feuer <david.feuer at gmail.com>:
>
> This has been raised before. I'm going to try to look at implementation within the next week or so.
>
> On Tue, Dec 1, 2020, 4:17 AM Ben Franksen <ben.franksen at online.de> wrote:
>>
>> Would it make sense to add a function like the following to containers:
>>
>>   symmetricDifference :: Set a -> Set a -> (Set a, Set a, Set a)
>>   symmetricDifference a b = (a \\ b, a `intersection` b, b \\ a)
>>
>> with the idea that this can be implemented more efficiently as a
>> primitive than the above specification? (And similarly for HashSet.)
>>
>> If this is the case, then perhaps difference and intersection could be
>> defined in terms of this new primitive:
>>
>>   difference a b = let (r, _, _) = symmetricDifference in r
>>   intersection a b = let (_, r, _) = symmetricDifference in r
>>
>> *if* it turns out that this does not degrade performance.
>>
>> Cheers
>> Ben
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries


More information about the Libraries mailing list