<++> doit
echo csc -s -j m0 -o m0.so m0.scm \               
&&   csc -s -j m0 -o m0.so m0.scm \               
&& echo csc -s -o m0.import.so m0.import.scm \    
&&      csc -s -o m0.import.so m0.import.scm \    
&& echo csc -I. -s -j m1 -o m1.so m1.scm \        
&&      csc -I. -s -j m1 -o m1.so m1.scm \        
&& echo csc -I. -s -o m1.import.so m1.import.scm \
&&      csc -I. -s -o m1.import.so m1.import.scm \
&& echo csc -L. -o main main.scm \                
&&      csc -L. -o main main.scm \                
&& echo ./main \                                  
&&      ./main                                    
<-->

<++> m0.scm
(module m0      
  *             
                
(import scheme) 
(import chicken)
                
(define (f0 x y)
  `(,x ,y)))    
<-->

<++> m1.scm
(module m1                                      
  *                                             
                                                
(import-for-syntax scheme)                      
(import-for-syntax chicken)                     
(import-for-syntax m0)                          
                                                
(import scheme)                                 
(import chicken)                                
(use m0)                                        
                                                
(define-syntax make-f1                          
  (ir-macro-transformer                         
    (lambda (form rename compare?)              
      (let-values (((a b) (values -1 -2)))      
        `(define (f1 x)                         
           (list ,a ,b ,(f0 x (cadr form))))))))
                                                
(make-f1 10))                                   
<-->

<++> main.scm
(use m0 m1)               
(use extras)              
(pretty-print (f0 50 100))
(pretty-print (f1 5))     
<-->