#lang racket/base

;; vectors as method tables
(struct kons (kar kdr)
        #:methods gen:equal+hash
        [(define (equal-proc x y rec)
           (and (rec (kons-kar x) (kons-kar y))
                (rec (kons-kdr x) (kons-kdr y))))
         (define (hash-proc x rec)  12)
         (define (hash2-proc x rec) 13)])

(module+ test
  (require rackunit)

  (check-equal? (kons 1 2) (kons 1 2))
  (check-false (equal? (kons 1 2) 2))
  (check-false (equal? 2 (kons 1 2)))
  (check-false (equal? (kons 1 2) (kons 3 4)))
  (check-equal? (equal-hash-code (kons 1 2))
                (equal-hash-code (kons 1 2)))
  )
