It seems that (provide) is magical?  If I rewrite my form with provide in main & time-out then I don't need the datum->syntax-object at all, but if I remove the provides to be outside of syntax block then start, timeout, interface-version don't work anymore... 
<br><br>(module syntax-util mzscheme<br>&nbsp; (provide (all-defined))<br>&nbsp; <br>&nbsp; (define-syntax time-out <br>&nbsp;&nbsp;&nbsp; (lambda (stx) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx () <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ t) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(begin <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define timeout t) 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (provide timeout))))))<br>&nbsp; <br>&nbsp; (define-syntax main <br>&nbsp;&nbsp;&nbsp; (lambda (stx) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx () <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ body ...) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(begin <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define (start initial-request) body ...)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (provide start)))))) <br>&nbsp; <br>&nbsp; (define-syntax servlet<br>&nbsp;&nbsp;&nbsp; (lambda (stx)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx ()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ body ...)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #`(begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; body ... <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define interface-version &#39;v1)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (provide interface-version) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )))))<br>&nbsp; )<br><br>(require syntax-util)<br><br>(module webtest1 mzscheme<br>&nbsp; (require syntax-util)<br>&nbsp; (servlet<br>&nbsp;&nbsp; (time-out +inf.0) <br>&nbsp;&nbsp; (main `(p &quot;hello world&quot;)) 
<br>&nbsp;&nbsp; )<br>&nbsp; )<br><br>(require webtest1)<br><br>timeout<br>(start null) <br>interface-version<br><br><div><span class="gmail_quote">On 4/17/07, <b class="gmail_sendername">Yin-So Chen</b> &lt;<a href="mailto:yinso.chen@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

yinso.chen@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><span>Hi Jens - 
<br><br>thanks for the quick reply.&nbsp; After some more
researching plus looking at your code I realized where my mistakes are
- I thought symbols in a syntax expands out to itself, but apparently
this is not the case (hence my problem has nothing to do with
module/macros).&nbsp; Instead, I need to use datum-&gt;syntax-object to make
sure that timeout in syntax equals timeout in symbol (BTW - thanks for
your example showing below using stx as the context syntax... I was
scratching my head trying to figure out where I can provide a context).
<br><br>However, looking at your code there are some concepts that I don&#39;t understand: <br><ul><li>your
code provides syntax name for time-out and main rather than timeout,
start, initial-request, and interface-version - why this also works
without having to convert them to syntax-object?&nbsp; <br></li><li>how does the nested define-syntax work both in terms of expansion and scoping?&nbsp;</li><li>Aesthetics
and styles aside - is there a reason for nested define-syntax?&nbsp; (It
looks cool to learn, but I came from the C world where definitions
belong on top level, so want to know why and how I can think in this
fashion) <br></li></ul>Below is what I have right now that works... yours seem shorter ;) <span><br><br>(module syntax-util mzscheme <br>&nbsp; (provide (all-defined)) <br><br></span>&nbsp; (define-syntax time-out <span>
<br>&nbsp;&nbsp;&nbsp; (lambda (stx) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx () 
<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ t) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (with-syntax ((timeout (datum-&gt;syntax-object stx &#39;timeout))) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(define timeout t))))))<br>&nbsp; <br>&nbsp; (define-syntax main <span><br>&nbsp;&nbsp;&nbsp; (lambda (stx) 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx () 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ body ...) <br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (with-syntax ((start (datum-&gt;syntax-object stx &#39;start))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (initial-request (datum-&gt;syntax-object stx &#39;intial-request))) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(define (start initial-request) 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; body ...))))))<span><br>&nbsp; <br>&nbsp; (define-syntax servlet <br>&nbsp;&nbsp;&nbsp; (lambda (stx) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx () <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ body ...) <br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (with-syntax ((interface-version (datum-&gt;syntax-object stx &#39;interface-version))) 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(begin <span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; body ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define interface-version &#39;v1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (provide (all-defined))))))))) <br><br></span><span>(module webtest1 mzscheme 
<br>&nbsp; (require syntax-util) <br>
&nbsp; (servlet <br>&nbsp;&nbsp; (time-out +inf.0)<br>&nbsp;&nbsp; (main &#39;(p &quot;hello world&quot;)))) <br><br>(require webtest1) <br><br></span>timeout ; =&gt; +inf.0<br>interface-version ; =&gt;&nbsp; &#39;v1 <br>(start null) ; =&gt; &#39;(p &quot;hello world&quot;)
<br><br>Thanks,<br>yinso <div><span><br><br><br><div><span class="gmail_quote">On 4/17/07, <b class="gmail_sendername">Jens Axel Søgaard</b> &lt;<a href="mailto:jensaxel@soegaard.net" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">


jensaxel@soegaard.net</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Yin-So,<br><br>Here is one way to do it:<br><br>(module syntax-util mzscheme<br>&nbsp;&nbsp; (provide (all-defined))<br><br>&nbsp;&nbsp; (define-syntax servlet<br>&nbsp;&nbsp;&nbsp;&nbsp; (lambda (stx)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx ()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ body ...)
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(with-syntax ([time-out (datum-&gt;syntax-object stx &#39;time-out)]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[main&nbsp;&nbsp;&nbsp;&nbsp; (datum-&gt;syntax-object stx &#39;main)])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#`(begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define-syntax (time-out stx)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(syntax-case stx ()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((_ value)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define timeout value)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (provide timeout)))))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define-syntax (main stx)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(syntax-case stx ()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[(_ body1 (... ...))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(define start<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda (initial-request)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; body1 (... ...)))]))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;body ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define interface-version &#39;v1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(provide (all-defined))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))))))<br>&nbsp;&nbsp; )<br><br>&nbsp;&nbsp;&nbsp;&nbsp;(require syntax-util)<br><br>&nbsp;&nbsp;(module webtest1 mzscheme
<br>&nbsp;&nbsp;&nbsp;&nbsp;(require syntax-util)<br>&nbsp;&nbsp;&nbsp;&nbsp;(servlet<br>&nbsp;&nbsp;&nbsp;&nbsp; (time-out +inf.0)<br>&nbsp;&nbsp;&nbsp;&nbsp; (main `(p &quot;hello world&quot;))<br>&nbsp;&nbsp;&nbsp;&nbsp; ))<br><br>&nbsp;&nbsp;(require webtest1)<br><br>&nbsp;&nbsp;timeout<br><br><br>I moved the definitions of time-out and main into the expansion of
<br>servlet, since they need to be in the scope of the forms of body ... .<br>Note that when expanding into ... one needs to write (... ...).<br><br>Also, to provide a name such as timeout, the provide form must have<br>


the same syntactic context as the definition. The easiest way to ensure
<br>this is, to put a provide-clause next to the definition.<br><br>--<br>Jens Axel Søgaard<br><br><br><br>--<br>Jens Axel Søgaard<br><br></blockquote></div><br><br clear="all"><br></span></div><div><span>
-- <br><a href="http://www.yinsochen.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://www.yinsochen.com</a><br>...continuous learning...
</span></div>
</span></div></blockquote></div><br><br clear="all"><br>-- <br><a href="http://www.yinsochen.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.yinsochen.com</a><br>...continuous learning...