[plt-scheme] difference between imported definition versus locally defined definitions?

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sun Apr 29 05:31:55 EDT 2007

After finally stepping back to try to see what you're after, I think
maybe you want to work in something like the following mode:

 > (compile-enforce-module-constants #f)
 > (module foo mzscheme
     (define bar (lambda (x) x))
     (provide bar))
 > (require foo)
 > (bar 10)
 ;; decide to explore `bar' some more...
 > (current-namespace (module->namespace 'foo))
 > (require (lib "trace.ss"))
 > (trace bar)
 > (bar 10)
 |(bar 10)

That is, to perform debugging tasks like `trace'ing a module binding,
switch to a namespace that reflects the module's content where `trace'
can work (as long as module constants are not enforced up front).

If that's not exactly right, I still imagine that you're trying to
create a debugging tool, and so reflective operations like
`module->namespace' and even `eval' are maybe the right starting
points, instead of `#%top'.


At Mon, 23 Apr 2007 21:05:46 -0700, "Yin-So Chen" wrote:
> Yes, I don't really want #%top per se.  My scenario is to "alias" an
> imported id (i.e. not something privately defined by the module) and it
> looks more like below:
> > (module foo mzscheme
>     (define bar (lambda (x) x))
>     (provide bar))
> > (begin
>     (require (prefix baz: foo))
>     (define bar baz:bar))
> > baz:bar
> #<procedure:bar>
> > bar
> #<procedure:bar>
> Aliasing allow me to "trace" and set over the alias (
> http://list.cs.brown.edu/pipermail/plt-scheme/2007-March/016927.html).  So I
> extracted the exported variables for a module (
> http://list.cs.brown.edu/pipermail/plt-scheme/2003-November/003698.html) and
> attempt to do write a macro that would automatically alias them, but all of
> the variables gets expanded to (#%top . variable) form, while if I manually
> write it out like above, it is "ok".

Posted on the users mailing list.