#lang racket (require [only-in plait test test/exn error print-only-errors]) (define (o-constr x) (lambda (m) (case m [(+) (lambda (y) (+ x y))]))) (define-syntax snd (syntax-rules () [(_ obj selector args ...) ((obj (quote selector)) args ...)])) (define o5 (o-constr 5)) (define o2 (o-constr 2)) (test (snd o5 + 3) 8) (test (snd o2 + 3) 5)