You're trying to produce a syntax object containing (quote void).
The printed representation for that would be one of:
#<syntax (quote void)>
or (#<syntax quote> . #<syntax (void)>)
or (#<syntax quote> #<syntax void>)
or (#<syntax quote> #<syntax void> . #<syntax ()>)
The first time, your macro produced the symbol "quote" (incorrect)
and an identifier "void" like (quote #<syntax void>). That's not
correct because the quote should be an identifier.
Note that (quote #<syntax void>) can be written as
(quote #<syntax void> . ())
using explicit pairs.
The second time, you tried to fix it by doing datum->syntax on the
whole (quote #<syntax void> . ()) object. That produces:
#<syntax (#<syntax quote> void . #<syntax ()>)>
which is the same as:
(<#syntax #<syntax quote>> #<syntax void> . #<syntax #<syntax ()>>)
So, you fixed the "void" by making it an identifier, but messed up
the things that were correct, like #<syntax quote>, by making it no
longer an identifier, but a syntax object containing an identifier.
Similarly, #<syntax ()> was converted from being a syntax for () to
being a syntax for a syntax for (). Do you see the difference?
Aziz,,,