effekt icon indicating copy to clipboard operation
effekt copied to clipboard

`equals` does not work properly in chez Backends

Open marzipankaiser opened this issue 8 months ago • 0 comments

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
}

marzipankaiser avatar Jun 13 '24 11:06 marzipankaiser