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