[plt-scheme] undefined identifiers after generating (require (all-except)) statement
At Tue, 25 Jul 2006 19:23:47 -0700 (PDT), Danny Yoo wrote:
> I think
> what's going on is that REQUIRE is trying to use the whole syntax object
> to introduce the identifiers non-hygienically, but that's not working out
> because the syntax object here:
>
> > [(_ (all-except mod id ...))
> > #`(require (all-except mod id ...))]
>
> has a different color than the input stx, since that syntax object is
> freshly created by the macro.
Not the whole `require' form, but the `all-except' part. So, this
works, too:
(module m2 mzscheme
(define-syntax (my-require stx)
(syntax-case stx (all-except)
[(_ (all-except mod id ...))
#`(require
#,(datum->syntax-object
#'mod
(syntax-object->datum
#'(all-except mod id ...))))]
[(_ mod) ;; require entire module
#'(require mod)]))
(my-require (all-except m1 foo))
(display bar))
See also 12.3.5 in the current MzScheme manual:
http://download.plt-scheme.org/doc/351/html/mzscheme/mzscheme-Z-H-12.html#node_sec_12.3.5
Since the names bound by the `require' are not explicitly mentioned in
the `require' form, it's not clear to me where the context should
originate. Maybe it would be better to always use the module name
instead of the clause as a whole, but I'm not sure.
Matthew