UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture06/ const.rkt
#lang racket
(require [only-in plait test test/exn error print-only-errors])

(define (o-constr x)
  (lambda (m)
    (case m
      [(+) (lambda (y) (+ x y))])))

(define-syntax snd
  (syntax-rules ()
    [(_ obj selector args ...)
     ((obj (quote selector)) args ...)]))

(define o5 (o-constr 5))
(define o2 (o-constr 2))
(test (snd o5 + 3) 8)
(test (snd o2 + 3) 5)