base icon indicating copy to clipboard operation
base copied to clipboard

Unreliable set of sets

Open timjs opened this issue 2 years ago • 2 comments

As a consequence of universal equality in Unison, making a set of sets does not behave correctly:

s1 = List.range 1 10 |> Set.fromList
s2 = List.range 1 10 |> List.reverse |> Set.fromList

> s1 === s2 -- These are not equal, because the internal representation is different...

ss = Set.fromList [s1, s2]

> ss |> Set.size -- ... and therefore this returns `true`!

I know there is no easy solution for it now, but maybe we could add to the documentation of Set (and Map) that creating a set of sets won't work the way people expect due to implementation details.

timjs avatar May 08 '23 19:05 timjs

Good catch, thanks @timjs

aryairani avatar May 08 '23 20:05 aryairani

If you use Set.== instead of Universal.===, then s1 Set.== s2 does return true. However, I don't think that there's currently a good workaround for Set.fromList [s1, s2] returning a set with two elements.

This is an example of why #84 is needed.

ceedubs avatar Aug 30 '23 09:08 ceedubs