(define (field-changer rtd field-name)

   (let ((field-names (record-type-field-names rtd)))

     (let ((index (let loop ((i 0))
                    (if (eq? (vector-ref field-names i) field-name)
                        i
                        (loop (+ i 1))))))

       (let ((accessor (record-accessor rtd index))
             (mutator  (record-mutator  rtd index)))

         (lambda (record procedure)

           (mutator record (procedure (accessor record))))))))


leppie wrote:

You still need to cater for parent types too  :)

I tried it out on example records with parent and child types. It seemed to work OK.

Ed

Reply via email to