<HTML><BODY><p>#lang racket<br>(require (for-syntax racket racket/struct-info))<br>(struct foo (a b))<br>(set! foo-a (let ([old foo-a])<br>                          (λ (x) (displayln x) (old x))))<br>(define t (foo 1 2))<br><br>(displayln "Before change")<br>(match t [(foo a b) a])<br><br>(let-syntax ([foo (extract-struct-info (syntax-local-value #'foo))])<br>   (displayln "After change")<br>   (match t [(foo a b) a]))<br><br>Gives:<br></p><p>Before change<br>1<br>After change<br>#<foo><br>1<br><br>So, resetting foo to the same struct-info enable calling modified foo-a. But why?<br>Besides, if it is inevitable, how to redefine (like set!) the syntax?</p><br><br>-- <br>Roman Klochkov</BODY></HTML>