On Oct 27, 2014, at 7:00 PM, Dan Liebgold wrote: > I have a namespace behind a particular API. I'd love to hook into the module > system to control compilation, visibility, etc. of all the definitions and > references. > > Here's an example. 'a' is available in the top level module even though it > was defined by module 'm1' and not provided by any explicit mechanism. (Also, > order dependencies seem imminent.)
Since you didn't reply to Jay's response, let me resume the thread. You had written not quite this: > #lang racket (module base racket (define my-table (make-hasheq)) (define-syntax (my-define stx) (syntax-case stx () [(_ my-id expr) (identifier? #'my-id) #'(hash-set! my-table 'my-id expr)])) (define-syntax (my-eval stx) (syntax-case stx () [(_ my-id) #'(hash-ref my-table 'my-id #f)])) ;; <--- my first change (provide my-define my-eval)) (module m1 racket (require (submod ".." base)) (my-define a (+ 1 2))) (require 'base 'm1) (my-eval a) ;; <--- my second change ;; --- When you write 'a' is available in the top-level module, even though you didn't import it, I don't see it. You imported all of base into the top level and m1. These imports include accessors to 'my-table' and 'm1' happened to store a key in this table. Why should you not be able to retrieve the value of 'a'? -- Matthias
_________________________ Racket Developers list: http://lists.racket-lang.org/dev