I made a version of the Common Lisp with-slots
macro for Racket structs recently that I'm proud of.
(require soup-lib/struct)
(struct demo (a b c) #:transparent #:mutable)
(define x (demo 1 2 3))
(with-slots demo (a b) x
(set! b (+ a b))
(print x)) ; (demo 1 3 3)
Vital to the implementation are make-variable-like-transformer
and the struct-id
syntax class.