base
base copied to clipboard
Unreliable set of sets
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.
Good catch, thanks @timjs
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.