#lang racket (require [only-in plait test test/exn error print-only-errors]) (define (mk-O x) (lambda (m) (case m [(+) (lambda (y) (+ x y))] [(-) (lambda (y) (- x y))]))) (define-syntax snd (syntax-rules () [(_ obj selector args ...) ((obj (quote selector)) args ...)])) (define O2 (mk-O 2)) (define O5 (mk-O 5)) (test (snd O2 - 3) -1) (test (snd O5 + 7) 12)