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