Kludge of the week: (define (compose f g) (let ((the-composition (lambda (x) (f (g x))))) (if (has-setter? f) (declare-setter the-composition (let ((core (setter f))) (lambda (new-value x) (core new-value (g x)))))) the-composition)) PS: Aren't first-class procedures fun? :-)