¿Hay alguna forma abreviada de actualizar un campo de estructura específico en raqueta?

Supongamos que tengo una estructura con muchos campos:

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

Si debo devolver una nueva estructura conf2 actualizado, tengo que reformular todos los demás campos:

(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))

Lo cual es redundante y sería una fuente de errores si actualizo el número de los campos o cambio sus pedidos.

Realmente me pregunto si existe una manera de actualizar un campo específico para una estructura como:

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

O simplemente puedo establecerlos en un nuevo valor como:

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

Aviso, esto no está mutandos aquí;my-struct-f2-update ymy-struct-f2-set debería estar devolviendo una copia des conf2 campo actualizado

En Haskell conozco la biblioteca 'lente' que hace este trabajo. Me pregunto si hay algunas formas similares que puedo adoptar para la raqueta. Gracias.