On Aug 15, 2015, at 9:50 PM, Matthew Butterick <m...@mbtype.com> wrote:

> BTW, is it possible to extend your solution to macro-introduced imports from 
> a submodule?
> 
> In the original case, the identifier name was known in advance:

> But suppose instead the identifiers come from a submodule. I see from the 
> docs for `all-from-out` that "macro-introduced imports are not re-exported, 
> unless the module-path was introduced at the same time", so it feels like it 
> should go something like this, though this doesn't work (there's a difference 
> between the unquoted and quoted name that I'm not capturing).
> 
> (define-syntax my-module-begin
>   (lambda (stx)
>     (syntax-case stx ()
>       [(_ body ...)
>        (with-syntax ([sub-id (datum->syntax stx 'sub)])
>          #'(#%module-begin
>              (module sub-id racket/base
>                (define x 2)
>                (provide x))
>              (require sub-id)
>              (provide (all-from-out sub-id))
>              body ...))])))

Does this work?
(define-syntax my-module-begin
  (lambda (stx)
    (syntax-case stx ()
      [(_ body ...)
       (with-syntax ([sub-id (datum->syntax stx ''sub)])
         #'(#%module-begin
             (module sub-id racket/base
               (define x 2)
               (provide x))
             (require sub-id)
             (provide (all-from-out sub-id))
             body ...))])))


> On Aug 15, 2015, at 6:21 PM, Matthew Butterick <m...@mbtype.com> wrote:
> 
>> Of your suggestions, I couldn't get `syntax-local-introduce` to work, but 
>> `datum->syntax` did. That made the macro-introduced identifier accessible at 
>> the REPL. Thanks.
>> 
>> However, I also wanted to set up the #lang so that DrRacket would 
>> automatically print the value of `id` when it ran the file. I noticed I 
>> could do this by introducing a `(module+ test ...)` in the #lang itself that 
>> prints `id` (because by default, DrRacket automatically runs test 
>> submodules). Thus obviating the need for a wrapper module.
>> 
>> 
>> 
>> 
>> 
>> On Aug 15, 2015, at 5:08 PM, Matthew Butterick <m...@mbtype.com> wrote:
>> 
>>> Probably the wiser option. I'll see if I can adapt that solution.
>>> 
>>> 
>>> On Aug 15, 2015, at 4:31 PM, Alexander D. Knauth <alexan...@knauth.org> 
>>> wrote:
>>> 
>>>> What kind of funny stuff?
>>>> By the way, this sounds sort of like this
>>>> http://www.mail-archive.com/racket-users@googlegroups.com/msg28020.html
>>>> Solution: 
>>>> http://www.mail-archive.com/racket-users@googlegroups.com/msg28031.html
>>>> 
>>>> Although it could be a completely different problem, I don't know.
>>>> 
>>>> On Aug 15, 2015, at 6:22 PM, Matthew Butterick <m...@mbtype.com> wrote:
>>>> 
>>>>> I have a #lang that does some funny stuff with #%module-begin (maybe too 
>>>>> funny), the result being that when I run it in DrRacket, the `provide`d 
>>>>> identifiers aren't visible at the top level:
>>>>> 
>>>>> (module my-lang-module my-lang
>>>>> ...
>>>>> (define id 42)
>>>>> (provide id))
>>>>> 
>>>>>> id
>>>>> id : undefined;
>>>>> cannot reference undefined identifier
>>>>> 
>>>>> 
>>>>> I've found a simple cure (maybe too simple) whereby I wrap my-lang-module 
>>>>> with the usual racket/base module, which satisfies DrRacket:
>>>>> 
>>>>> 
>>>>> (module repl-wrapper racket/base
>>>>> (module my-lang-module my-lang
>>>>> ...
>>>>> (define id 42)
>>>>> (provide id))
>>>>> (require 'my-lang-module)
>>>>> (provide (all-from-out 'my-lang-module))
>>>>> 
>>>>>> id
>>>>> 42
>>>>> 
>>>>> 
>>>>> Question: is there an approved way to make this #lang-wrapping happen for 
>>>>> the REPL, and only for the REPL? AFAICT `#%top-interaction` is not the 
>>>>> cure, because it wraps the commands coming off the REPL (as opposed to 
>>>>> the code in the definitions window). 
>>>>> 
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google Groups 
>>>>> "Racket Users" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>>> email to racket-users+unsubscr...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>> 
>>> 
>> 
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to