(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
