I just tried replacing the lexical context of path, and got this: #lang racket/load ;;provider (module T racket (provide a) (define a 1)) ;; requirer (module R racket (require (for-syntax syntax/parse syntax/strip-context)) (define-syntax (test-binding stx) (syntax-parse stx [(_ path) #:with new-path (replace-context #'here #'path) #'(let () (local-require (only-in new-path a)) a)])) (test-binding 'T)) ;; go (require 'R)
So I think when it expands (only-in path [a a]), it introduces a with the lexical context of the second a, bit when it expands (only-in path a), it introduces a with the lexical context of path. On Nov 6, 2014, at 4:36 PM, Spencer Florence <spen...@florence.io> wrote: > Thanks! That fixed it! > > Although I'm still curious as to why the error happens in the first place. > On Thu Nov 06 2014 at 3:32:02 PM Alexander D. Knauth <alexan...@knauth.org> > wrote: > I think I had a similar sort of problem about a year ago (I was at either > RacketCon or a Hackathon that same weekend and Mathew Flatt figured it out), > and the solution was changing (only-in path a) to (only-in path [a a]). > > #lang racket/load > ;;provider > (module T racket > (provide a) > (define a 1)) > ;; requirer > (module R racket > (require (for-syntax syntax/parse)) > (define-syntax (test-binding stx) > (syntax-parse stx > [(_ path) > #'(let () (local-require (only-in path [a a])) a)])) > (test-binding 'T)) > ;; go > (require ‘R) > > > On Nov 6, 2014, at 4:09 PM, Spencer Florence <spen...@florence.io> wrote: > > > Hi All, > > > > I've been struggling to have a macro be given a path then require something > > from that path. The following code produces and "Unbound Identifier" error, > > although I would expect it to evaluate to 1. Could someone provide insight > > into what is going on? > > > > #lang racket/load > > ;;provider > > (module T racket > > (provide a) > > (define a 1)) > > ;; requirer > > (module R racket > > (require (for-syntax syntax/parse)) > > (define-syntax (test-binding stx) > > (syntax-parse stx > > [(_ path) > > #'(let () (local-require (only-in path a)) a)])) > > (test-binding 'T)) > > ;; go > > (require 'R) > > > > > > P.S. I attempted to do this with `dynamic-require,` but that failed because > > in my actual program `path` is sometimes `(submod "..")`, which caused an > > error about not having a base path. > > > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users >
____________________ Racket Users list: http://lists.racket-lang.org/users