> On Oct 17, 2017, at 20:11, Philip McGrath <phi...@philipmcgrath.com>
> wrote:
> 
> It wouldn't solve the problem with shadowing `require`d identifiers,
> but would having `#%module-begin` introduce the `require` (with proper
> lexical context information), instead of doing it with the reader,
> solve at least this part of the problem?

Theoretically, yes. It still doesn’t solve the shadowing problem, but
that seems essentially impossible to do in a totally transparent way.
The main unfortunate thing, however, is that `#%module-begin` doesn’t
know what its module language is. One could theoretically export a
different `#%module-begin` from each of hackett/private/kernel,
hackett/base, and hackett (the three module languages Hackett provides),
each of which introduces a different unhygienic `require`. The downside
to this is that a user extending `#lang hackett` to make a new `#lang`
would likely reuse Hackett’s `#%module-begin`, and they’d be in for a
real surprise when they discovered their types weren’t available in
their new `#lang`!

(It will also probably do strange things when interacting with module*
submodules with #f for the module path, but that can be hacked around —
the implementation of namespaces already does plenty of that.)

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to