[racket-dev] submodule in macro
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>