#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)