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