On Fri, Aug 12, 2011 at 1:39 PM, Danny Yoo <[email protected]> wrote: > On Fri, Aug 12, 2011 at 1:37 PM, Sam Tobin-Hochstadt <[email protected]> > wrote: >> On Fri, Aug 12, 2011 at 1:25 PM, Danny Yoo <[email protected]> wrote: >>> >>> In which the first three lines are coming from compile-time, and I see >>> that my lift-to-toplevel macro is firing off, even though I placed it >>> in the stop-list of local-expand. >> >> What's happening here is that the `#%module-begin' binding from >> `racket/base' calls `local-expand' on each of its forms, to determine >> whether its an expression or not. This implements the printing of >> top-level expressions. If you replace `#%module-begin' with >> `#%plain-module-begin', you should see the desired behavior. > > Ha ha; that's tricky! Thanks! Can something about this be included > in the documentation of local-expand?
Alternately, if you want to keep the printing behavior of #%module-begin, then local-expand each body element directly, and wrap them in #%module-begin after the fact. This is more work (e.g. manual splicing of begin), but doesn't require knowing how #%module-begin or #%plain-module-begin are implemented. In general, with local-expand, it is best not to make assumptions about how sub-parts of a form are expanded. If you want to interpret something specially, expanding it without wrappers is the most predictable way. --Carl _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users

