UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture06/ mk-O.rkt
#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)