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

(define o-self!
  (let ([self 'dummy])
    (begin
      (set! self
            (lambda (m)
              (case m
                [(first) (lambda (x) (msg self 'second (+ x 1)))]
                [(second) (lambda (x) (+ x 1))])))
      self)))
(test (msg o-self! 'first 5) 7)