effekt
effekt copied to clipboard
`equals` does not work properly in chez Backends
In the chez Backends, we use scheme-equal?
to implement equals
.
This does not properly recurse, so the test examples/pos/issue429.effekt
(added in #499) fails on Chez.
It seems that equal?
uses reference equality for records in Chez Scheme (by default?):
(define-record-type point (fields x y))
(equal? (make-point 2 3) (make-point 2 3)) ; ~> #f
Current behavior on Effekt in the Chez-Backends:
type MyType {
MySingleCase()
}
record EmptyRecord()
def main() = {
println(MySingleCase().equals(MySingleCase())) // ~> true
println(EmptyRecord().equals(EmptyRecord())) // ~> true
println(Some(MySingleCase()).equals(Some(MySingleCase()))) // ~> false
println(Some(EmptyRecord()).equals(Some(EmptyRecord()))) // ~> false
println([Some(EmptyRecord()), Some(EmptyRecord()), None()].equals([Some(EmptyRecord()), Some(EmptyRecord()), None()])) // ~> false
}