Gibt es eine Möglichkeit, ein bestimmtes Strukturfeld im Racket zu aktualisieren?

Angenommen, ich habe eine Struktur mit vielen Feldern:

(struct my-struct (f1 f2 f3 f4))

Wenn ich eine neue Struktur mit @ zurückgeben sof2 aktualisiert, ich muss alle anderen Felder umformulieren:

(define s (my-struct 1 2 3 4))
(my-struct (my-struct-f1 s)
           (do-something-on (my-struct-f2 s))
           (my-struct-f3 s)
           (my-struct-f4 s))

Was überflüssig ist und eine Fehlerquelle darstellen würde, wenn ich die Anzahl der Felder aktualisiere oder deren Reihenfolge ändere.

Ich frage mich wirklich, ob es eine Möglichkeit gibt, ein bestimmtes Feld für eine Struktur wie die folgende zu aktualisieren:

(my-struct-f2-update (my-struct 1 2 3 4)
                     (lambda (f2) (* f2 2)))
;; => (my-struct 1 4 3 4)

Oder ich kann sie einfach auf einen neuen Wert setzen als:

(define s (my-struct 1 2 3 4)
(my-struct-f2-set s (* (my-struct-f2 s) 2))
;; => (my-struct 1 4 3 4)

Hinweis, das ist nicht mutierends Hier;my-struct-f2-update undmy-struct-f2-set sollte nur eine Kopie von @ zurücksends mitf2 Feld aktualisiert.

In Haskell kenne ich die 'Objektiv'-Bibliothek, die diese Arbeit erledigt. Ich frage mich nur, ob es ähnliche Möglichkeiten gibt, die ich für Schläger anwenden kann. Vielen Dank