[plt-scheme] language module: macros + checker/interpreter functions
Hi all,
I have an interpreter whose front-end I implemented as a language  
module.  My first pass at it was as follows:
(module my-lang mzscheme
   (require "internal-lang.ss") ;; provides (run : expr -> value)
   (define-syntax (t-atom stx)
     (syntax-case stx ()
       [(_ . d) #'(run 'd)]
   (define-syntax t-app
     (syntax-rules ()
       [(_ e1 e2) (run '(e1 e2))]))
   (define-syntax mbegin
     (syntax-rules ()
       [(_ e1 e2 ...)
        (#%module-begin (map (lambda (x) (run x)) (list 'e1  
'e2 ...)))]))
   (provide (rename t-atom #%top)
            (rename t-atom #%datum)
            (rename t-app #%app)
            (rename mbegin #%module-begin)
            )
   )
This seems clunky to me.  More importantly, for a typechecker I'm  
writing, I need to extract location information via macros.  What I  
want is a round of macro expansion, then processing of the result by  
my typechecker and interpreter.
Is this a feasible approach?  I've spent a few hours already fiddling  
with it (trying to set current-eval, or get a macro to expand into a  
form in my internal language, and various other approaches) and come  
up dry, so I'd appreciate any suggestions as I continue working on it.
Thanks,
jmj