#lang racket (require [only-in plait test test/exn error print-only-errors]) (define o (lambda (m) (case m [(add1) (lambda (x) (+ x 1))] [(sub1) (lambda (x) (- x 1))]))) (define (msg obj selector . args) (apply (obj selector) args)) (define-syntax snd (syntax-rules () [(_ obj selector args ...) ((obj (quote selector)) args ...)])) (test (msg o 'sub1 6) 5) (test (snd o sub1 6) 5)