Existe uma maneira abreviada de atualizar um campo struct específico na raquete?

Suponha que eu tenha uma estrutura com muitos campos:

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

Se eu quiser retornar uma nova estrutura comf2 atualizado, eu tenho que reformular todos os outros 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))

O que é redundante e seria uma fonte de erros se eu atualizar o número dos campos ou alterar suas ordens.

Eu realmente me pergunto se existe uma maneira de atualizar um campo específico para uma estrutura como:

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

Ou posso apenas configurá-los para um novo 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)

Observe, isso não está mudandos aqui;my-struct-f2-update emy-struct-f2-set deveria estar apenas retornando uma cópia dos comf2 campo atualizado.

Em Haskell, conheço a biblioteca de lentes que faz esse trabalho. Só estou me perguntando se existem algumas maneiras semelhantes que eu possa adotar para a raquete. Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion