In syntax parse the racket code stores syntax values inside structs and then transport them down the macro chain as argument to macros. Then when unpacking the struct they are compared with arguments of syntax values. I think that this is the reason. I tried to experiment with psyntax macro expander to poke inside structs and that solved this issue. But on the other hand even worse problem appeared. What I did now was to manually clean the syntax values e.g. remove #f and shift from the syntax value and this gave the best result. As you see, it's just wild west to get the racket code working. Mayby just writing a version from scratch would be better. /Stefan On Mon, Jan 16, 2012 at 10:28 PM, Andy Wingo wrote: > On Mon 16 Jan 2012 20:46, Stefan Israelsson Tampe > writes: > > > why are these two not equal in the sense of bound-identifier=? > > > > #(syntax-object x ((top) #(ribcage () () ()) #(ribcage () () ()) > #(ribcage #(x) #((m1104 top)) #("i1105"))) (hygiene guile-user)) > > #(syntax-object x ((#f top) shift #(ribcage () () ()) #(ribcage #(x) > #((m1104 top)) #("i1105"))) (hygiene guile-user))) > > One has been anti-marked and the other has not? Meaning that one was > made up by your syntax expander, and the other and the other came in as > part of the form. > > But that's not the right question or answer. Can you should where these > identifiers come from? > > Andy > -- > http://wingolog.org/ >