gamburg.m
2021-12-20 03:33:35

hello! I’m trying to write a wrapper around a racket set to override a few methods for a particular task. In most of these method definitions, I call the same function on the set contained within my struct. This, however, calls my definition of that function, instead of the generic one for sets. Any idea why that might be and what I might do to get around this? (minimal code in thread)


gamburg.m
2021-12-20 03:34:13

(struct neighbor-set (edges) #:transparent #:methods gen:set [(define (set-member? st elem) (or (set-member? (neighbor-set-edges st) elem) (set-member? (neighbor-set-edges st) (- elem)))] (define (set-add st elem) (neighbor-set (set-add (neighbor-set-edges st) elem)))]) (define neighbors (neighbor-set (set))) (set-add neighbors 5) neighbor-set-edges: contract violation expected: neighbor-set? given: (set) ...


sorawee
2021-12-20 03:40:01

Use define/generic



gamburg.m
2021-12-20 03:48:37

thanks!