;; bundle generates a _message-accepting procedure_ (define (make-point x y) (define (get-x) x) (define (get-y) y) (define (set-x! new-x) (set! x new-x)) (define (set-y! new-y) (set! y new-y)) (bundle point? get-x get-y set-x! set-y!)) ; thus you can do (define p1 (make-point 3 4)) (define p2 (make-point -1 1)) (point? p1) ; #t (point? (lambda (x) x)) ; #f (p1 'get-x) ; 3