[racket-dev] submodule in macro

From: Stephen Chang (stchang at ccs.neu.edu)
Date: Sat Jan 26 09:05:48 EST 2013

Thanks for the clarification.
 On Jan 26, 2013 6:55 AM, "Matthew Flatt" <mflatt at cs.utah.edu> wrote:

> At Sat, 26 Jan 2013 01:12:04 -0500, Stephen Chang wrote:
> > Is this a supported use of submodules?
> >
> >
> > #lang racket
> >
> > (define-syntax (def-wrapped stx)
> >   (syntax-case stx ()
> >     [(_ (f arg ...) body ...)
> >      #'(begin
> >          (module tmp-module-name racket
> >            (define (f-tmp arg ...) (displayln "wrapper") body ...)
> >            (provide (rename-out [f-tmp f])))
> >          (require (quote tmp-module-name)))]))
> >
> > (def-wrapped (f x) (+ x 1))
> > (f 100)
> >
> >
> > Welcome to DrRacket, version 5.3.1.3 [3m].
> > Language: racket [custom].
> > . f: unbound identifier in module in: f
>
> Your `require' is macro-introduced, so it only binds uses that are also
> macro-introduced. Try renaming on import, since the rename target is an
> identifier supplied to the macro:
>
> #lang racket
>
> (define-syntax (def-wrapped stx)
>   (syntax-case stx ()
>     [(_ (f arg ...) body ...)
>      #'(begin
>          (module tmp-module-name racket
>            (define (f-tmp arg ...) (displayln "wrapper") body ...)
>            (provide f-tmp))
>          (require (rename-in (quote tmp-module-name)
>                              [f-tmp f])))]))
>
> (def-wrapped (f x) (+ x 1))
> (f 100)
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20130126/ac9ab4bf/attachment.html>

Posted on the dev mailing list.