[plt-scheme] Inlined language from a language module

From: Neil Toronto (ntoronto at cs.byu.edu)
Date: Fri Mar 20 13:33:12 EDT 2009

Aw, Jay, you beat me to it. But I would have said "pretty danged awesome".

Thanks, Matthew!

Neil

Jay McCarthy wrote:
> That's awesome.
> 
> Jay
> 
> On Fri, Mar 20, 2009 at 11:21 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
>> At Fri, 20 Mar 2009 11:02:35 -0600, Jay McCarthy wrote:
>>> On Fri, Mar 20, 2009 at 10:54 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
>>>> (define-syntax (with-mini stx)
>>>>  (syntax-case stx ()
>>>>    [(_ expr)
>>>>     #`(begin
>>>>         (require "mini.ss")
>>>>         #,(strip-context #'expr))]))
>>> Am I right to assume this only works at the top-level because it
>>> relies on require?
>> Good point.
>>
>> The simplest way I can find to allow `with-mini' anywhere requires
>>
>>  1. An extra module.
>>
>>  2. A `replace-context' function instead of `strip-context'.
>>
>> The latter is a simple generalization of `strip-context', and I've
>> added it to `syntax/strip-context' in SVN.
>>
>> ---- with-mini.ss ----------------------------------------
>> #lang s-exp "with-mini-maker.ss"
>> "mini.ss"
>>
>> ---- with-mini-maker.ss ----------------------------------
>> #lang scheme
>> (require (for-syntax syntax/strip-context))
>>
>> (provide (rename-out [module-begin #%module-begin]))
>>
>> (define-syntax (module-begin stx)
>>  (syntax-case stx ()
>>    [(_ req)
>>     #'(#%plain-module-begin
>>        (require req)
>>        (provide with-mini)
>>        (define-syntax (with-mini stx)
>>          (syntax-case stx ()
>>            [(_ expr)
>>             (replace-context #'req (strip-context #'expr))])))]))
>>
>> ---- example use of with-mini.ss -------------------------
>> #lang scheme
>> (require "with-mini.ss")
>>
>> (list (with-mini (1+ 0))
>>      (with-mini (1+ (1+ 0))))
>>
>>
>>
> 
> 
> 



Posted on the users mailing list.