net/uri-codec is not required (directly) into use.rkt. Instead, it is required at the definition of the macro and then a reference to that module is inserted into use.rkt. The macro system can track such references without explicitly having requires.
BTW, the same thing is happening with 'define'... :) Robby On Sat, Oct 20, 2012 at 9:30 AM, Greg Hendershott <[email protected]> wrote: > 1. Thank you! > 2. This works. Hooray. > 3. I don't understand why it works. Boo. > > My reasoning: > > In def.rkt, `define-foo' generates syntax. The syntax is a procedure > definition. The body of the defined procedure needs to use a function > from another module (in this case net/uri-codec). > > When Racket is compiling use.rkt, it substitutes `(define-foo)' with > the syntax from def.rkt. However, if that new syntax doesn't include a > `(require net/uri-codec)', how the heck does net/uri-codec get > required into use.rkt? > > On Fri, Oct 19, 2012 at 7:15 PM, Danny Yoo <[email protected]> wrote: >> On Fri, Oct 19, 2012 at 9:04 AM, Greg Hendershott >> <[email protected]> wrote: >>> I need to fix a bug, https://github.com/greghendershott/gapi/issues/2 . >>> >>> I've distilled to a simple case that exhibits the behavior: >>> >>> ;; def.rkt >>> #lang racket >>> (provide define-foo) >>> (define-syntax define-foo >>> (lambda (stx) >>> #`(begin >>> (require net/uri-codec) >>> (define (#,(datum->syntax stx 'foo)) >>> (alist->form-urlencoded '([a . "1"])))))) >> >> >> >> The macro's outputted code appears to require net/uri-codec. But >> rather that require be part of the macro's output, you probably should >> just modify def.rkt so that it requires net/uri-codec directly. >> >> Basically, change def.rkt and lift the require up: >> >> ;;;;;;;;;;;;;;;;;;;;;;;; >> #lang racket >> (provide define-foo) >> >> (require net/uri-codec) >> (define-syntax define-foo >> (lambda (stx) >> #`(define (#,(datum->syntax stx 'foo)) >> (alist->form-urlencoded '([a . "1"]))))) >> ;;;;;;;;;;;;;;;;;;;;;;;; > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users

