<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16481" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face="Courier New" size=2>
<DIV><FONT face="Courier New" size=2>Hi,</FONT></DIV>
<DIV><FONT face="Courier New" size=2>With help of the PLT-list I succeeded in 
making flavoured or composable modules, as I call them. Thanks Matthias and 
Scott!&nbsp;</FONT><FONT face="Courier New" size=2>I am afraid though, that I 
dont fully understand what I am doing in the two lines marked with 
&lt;======.</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Jos Koot</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>; Definitions window</DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(module compose-module-body 
mzscheme<BR>&nbsp;(provide (rename compose-module-body 
#%module-begin))<BR>&nbsp;<BR>&nbsp;(define-for-syntax (reader 
filename-string)<BR>&nbsp; (with-input-from-file (syntax-object-&gt;datum 
filename-string) read-syntax))<BR>&nbsp;<BR>&nbsp;(define-for-syntax 
(map-local-introduce stx)<BR>&nbsp; (map syntax-local-introduce (syntax-&gt;list 
stx)))<BR>&nbsp;<BR>&nbsp;(define-syntax (compose-module-body stx)<BR>&nbsp; 
(syntax-case stx ()<BR>&nbsp;&nbsp; ((_ (requirement ...) (syntax-requirement 
...) filename-string ...)<BR>&nbsp; 
#`(#%module-begin<BR>&nbsp;&nbsp;&nbsp;&nbsp; (require #,@(map-local-introduce 
#'(requirement ...))) ; &lt;======<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
(require-for-syntax #,@(map-local-introduce #'(syntax-requirement ...))) ; 
&lt;======<BR>&nbsp; #,@(map reader (syntax-&gt;list #'(filename-string 
...))))))))</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>#| Usage:</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(module &lt;module-name&gt; 
compose-module-body<BR>&nbsp;(require-spec ...)<BR>&nbsp;(syntax-require-spec 
...)<BR>&nbsp;&lt;filename-string&gt; ...)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>From each file&nbsp;one single sexpr 
(possibly a begin form) is read and inserted in the module.</FONT></DIV>
<DIV><FONT face="Courier New" size=2>The sexprs must be considered to form one 
single module body.<BR>&nbsp;<BR>Examples:<BR>|#</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(with-output-to-file 
"part1.scm"</FONT></DIV>
<DIV><FONT face="Courier New" size=2>&nbsp;(lambda () (write '(provide syn))) 
#;'replace)<BR>(with-output-to-file "part2.scm"</FONT></DIV>
<DIV><FONT face="Courier New" size=2>&nbsp;(lambda () (write '(define var "It 
works!"))) #;'replace)<BR>(with-output-to-file "part3.scm"</FONT></DIV>
<DIV><FONT face="Courier New" size=2>&nbsp;(lambda () (write '(define-syntax syn 
(syntax-rules () ((_) var))))) #;'replace)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(module example-1 compose-module-body 
<BR>&nbsp;(mzscheme) (mzscheme)<BR>&nbsp;"part1.scm" "part2.scm" 
"part3.scm")</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(require example-1)<BR>(syn) ; --&gt; "It 
works"</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(with-output-to-file 
"wrong-part.scm"</FONT></DIV>
<DIV><FONT face="Courier New" size=2>&nbsp;(lambda () (write 
'unbound-identifier)) #;'replace)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(module example-2 
compose-module-body<BR>&nbsp;(mzscheme) 
(mzscheme)<BR>&nbsp;"wrong-part.scm")</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(require example-2) ;&nbsp;icon 
wrong-part.scm::1: compile: unbound variable in module in: 
unbound-identifier</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>#| Interaction window:</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>Welcome to DrScheme, version 
370.6-svn21jul2007 [3m].<BR>Language: Textual (MzScheme, includes R5RS).<BR>"It 
works!"<BR>icon&nbsp;wrong-part.scm::1: expand: unbound variable in module in: 
unbound-identifier<BR>&gt; </FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>Clicking on the icon opens the erroneous 
file. Very nice.&nbsp;|#</FONT></DIV>
<DIV>&nbsp;</DIV></FONT></DIV></BODY></HTML>