(use-modules (oop goops)) GOOPS has some nice features (you can even use unexported methods with generics in 1.8) but there is no message passing paradigm. Objective-C has /tell/ Racket has /send/ but Guile/GOOPS is missing /call/. This is a first "raw" definition where the parameter /message/ has to be a quoted symbol. (define-method (call (receiver ) message . arguments) (apply (slot-ref receiver message) arguments)) The class definition still looks like traditional GOOPS but it works. An example: (define-class () (msg #:init-value (lambda () 'hello-world))) (define r (make )) (call r 'msg) => 'hello-world Now I'd like to have an easier syntax for describing the slot. The definition might be: (define-syntax define-message (syntax-rules () ((_ (message-name arguments ... ) body ...) (message-name #:init-value (lambda (arguments ...) body ...))))) But the following example doesn't work in 1.8: (define-class () (define-message (phone n) (repeat n (lambda () (bell) 'rang)) )) GOOPS complains about malformed slots and *seems* to see the unexpanded form.* I could use a little help here, anyone?* Even for the naming scheme: /send/ is already used by unix sockets and methods are part of the implementation of generics. Perhaps /message/ isn't that bad. The missing symbols from my pretext: (define (natural-number? n) (and (exact? n) (integer? n) ; 'integer?' does not check for exactness ... (> n 0))) (define-public (repeat n closure) "Execute closure n times." (if (not (or (natural-number? n) (= n 0))) (error "repeat: the parameter n must be an exact natural number or zero.") (let loop ((i 0)) (if (< i n) (begin (closure) (loop (1+ i)))) ))) From my pretext.rkt (define-syntax *broadcast* (syntax-rules () ((_ object-list method ...) (map {lambda (object) (send object method ...)} object-list)))) (define-syntax *broadcast** (syntax-rules () ((_ object-list method ...) (map {lambda (object) (send* object method ...)} object-list)))) (define-syntax *define/on-delegate* (syntax-rules () ((_ delegate-object (method-name ...)) (define (method-name ...) (send delegate-object method-name ...)) ))) PS Perhaps it's better to recreate a clean object model without 3,000 lines of C code like GOOPS. But then GOOPS really creates the illusion of an object oriented environment with a MOP ...