erg icon indicating copy to clipboard operation
erg copied to clipboard

Cannot compare mutable container (array, set, etc.) and immutable containers

Open mtshiba opened this issue 3 years ago • 1 comments

Reproducible code

i = !{1, 3}
i.add! 3
print! i
assert i == {1, 3}

a = ![1, 3]
a.push! 3
print! a
print! a == [1, 3, 3]

Expected behavior Passed.

Result

Error[#0595]: File examples/set_b.er, line 4, in <module>
4│ assert i == {1, 3}
          ^^^^^^^^^^^
TypeError: Set({1, 3, }, 2) or Set!(?T(:> {3, }, <: {3, 1, }), !2) does not implement Eq(Set({1, 3, }, 2) or Set!(?T(:> {3, }, <: {3, 1, }), !2))
Error[#0595]: File examples/set_b.er, line 9, in <module>
9│ print! a == [1, 3, 3]
          ^^^^^^^^^^^^^^
TypeError: Array({3, 1, }, 3) or Array!(?T(:> {3, }, <: {3, 1, }), !3) does not implement Eq(Array({3, 1, }, 3) or Array!(?T(:> {3, }, <: {3, 1, }), !3))

mtshiba avatar Oct 07 '22 13:10 mtshiba

This code should also be passed.

j: {Int; 2} = !{1, 2}

but:

Error[#0052]: File <stdin>, line 1, in <module>
1│ j: {Int; 2} = !{1, 2}
   ^
TypeError: the type of j is mismatched:
expected:  Set(Int, Nat(2))
but found: Set!((?T(<: {Nat(2), Nat(1), }(cyclicity: Not))[0]), !Nat(2))

It seems that Set! is not recognized as a subtype of Set.

mtshiba avatar Oct 07 '22 13:10 mtshiba