[[ I don't really understand the answer. I mean I understand the technicality but not the spirit. ]]
The 'f' comes from the macro input in both cases. Hence the rename-out could be seen as the actual name required. On Jan 26, 2013, at 6:55 AM, Matthew Flatt 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) > > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev _________________________ Racket Developers list: http://lists.racket-lang.org/dev

