Hi all - <br><br>I wrote a few macros that are meant to be syntactic sugars for servlet modules but appear to run into macro expansion problems that appears to be a depth program, or a conflict with macro provide or something else... not sure the actual causes.&nbsp; 
<br><br>What I am trying to do is to write something like following: <br><br>(module webtest1 mzscheme <br>&nbsp; (require &quot;syntax-util.scm&quot;) ; contains the syntactic sugar macros <br>&nbsp; (servlet ; this is the form that will expand to the 3 required form for servlets - interface-version is hard coded; need to define time-out &amp; main 
<br>&nbsp;&nbsp; (time-out +inf.0) <br>&nbsp;&nbsp; (main <br>&nbsp;&nbsp;&nbsp; `(p &quot;hello world&quot;)))<br>&nbsp; )<br><br>The goal is to have it expand to: <br><br>(module webtest1 mzscheme <br>&nbsp; (require &quot;syntax-util.scm&quot;) <br>&nbsp; (define interface-version &#39;v1) 
<br>&nbsp; (define timeout +inf.0) <br>&nbsp; (define (start initial-request) <br>&nbsp;&nbsp;&nbsp; `(p &quot;hello world&quot;)) <br>&nbsp; (provide (all-defined))) <br><br>I expanded my macros manually and it seem to produce the form above without problems.&nbsp; The actual expansion turns out to be: 
<br><br>&gt; (syntax-object-&gt;datum (expand &#39;(module webtest1 mzscheme <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (require syntax-util) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (servlet <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (time-out +inf.0) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (main <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `(p &quot;hello world&quot;))))))<br><br>(module webtest1 mzscheme<br>&nbsp; (#%plain-module-begin<br>&nbsp;&nbsp; (require-for-syntax mzscheme)<br>&nbsp;&nbsp; (require syntax-util)<br>&nbsp;&nbsp; (define-values (timeout) (#%datum . +inf.0))
<br>&nbsp;&nbsp; (define-values (start) (lambda (initial-request) &#39;(p &quot;hello world&quot;)))<br>&nbsp;&nbsp; (define-values (interface-version) &#39;v1)<br>&nbsp;&nbsp; (provide (all-defined))))<br><br>Which is the same when I manually expand the module with direct definition of timeout/start/interface-version. 
<br><br>&gt; (syntax-object-&gt;datum (expand&nbsp; &#39;(module webtest1 mzscheme <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (require syntax-util) <br>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp; (define timeout +inf.0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define (start initial-request) 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `(p &quot;hello world&quot;))<br>&nbsp;&nbsp;&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;&nbsp;&nbsp; (provide (all-defined))))))<br><br>(module webtest1 mzscheme<br>&nbsp; (#%plain-module-begin
<br>&nbsp;&nbsp; (require-for-syntax mzscheme)<br>&nbsp;&nbsp; (require syntax-util)<br>&nbsp;&nbsp; (define-values (timeout) (#%datum . +inf.0))<br>&nbsp;&nbsp; (define-values (start) (lambda (initial-request) &#39;(p &quot;hello world&quot;)))<br>&nbsp;&nbsp; (define-values (interface-version) &#39;v1)
<br>&nbsp;&nbsp; (provide (all-defined))))<br><br>The expansions appear to be the same, but when I require the first module, I was only able to get the definition for interface-version, but timeout and start are undefined.&nbsp; Why would this be the case? 
<br><br>The macros in question are following:<br><br>(module syntax-util mzscheme <br>&nbsp; (provide (all-defined)) <br><br>&nbsp; (define-syntax (time-out stx) <br>&nbsp;&nbsp;&nbsp; (syntax-case stx () <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ value) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(define timeout value)))) 
<br>&nbsp; <br>&nbsp; (define-syntax (main stx) <br>&nbsp;&nbsp;&nbsp; (syntax-case stx () <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ body ...) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #`(define start <br>&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; body ...)))))&nbsp; <br>&nbsp; <br>&nbsp; (define-syntax servlet&nbsp; 
<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; #`(begin <br>&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; (define interface-version &#39;v1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (provide (all-defined))&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))))) <br>&nbsp; )<br><br>Thanks,<br>yinso <br><br>-- <br><a href="http://www.yinsochen.com">http://www.yinsochen.com</a><br>...continuous learning...