This page is part of the web mail archives of SRFI 83 from before July 7th, 2015. The new archives for SRFI 83 contain all messages, not just those from before July 7th, 2015.
Here are a few questions and possible loose ends that occurred to me
while reading the document. Some of these may of course only reflect
a lack of understanding on my part:
- Can I shadow CAR from the R6RS language, either with an import
or a local definition? This kind of thing is potentially useful.
However, the document says: "No identifier can be imported multiple
times...", which seems to preclude this, unless the "language" is
conceptually not an import?
- Is "scheme://r6rs" also a library? Specifically, can I say
(import (add-prefix "scheme://r6rs" r6rs:))
- Related to previous: Does the language specification act semantically
like an import? It might be helpful to explain the difference, if any.
In particular, is "scheme://r6rs" also visited/invoked, and what do
these mean, if anything, for the R6RS dynamic environment?
- Can I import different bindings for the same identifier into different
phases? I'm not sure if the document forbids this. In fact, it
explicitly allows the /same/ binding to be imported into different
phases (which is also conceptually a "multiple" import).
I know MzScheme allows this, and it is also potentially
quite useful.
- Is the "language" imported into all reflective levels (no matter
how deep LET-SYNTAX is nested)?
- Would it be possible to provide a rationale for the notion of
indirect exports. The thing is, I know of at least two module
systems that do well without this notion. I kind of see why it
is in there, but at the same time it kind of seems to conflict
(at least a little bit) with the notion of lexical scoping.
- The IMPORT DSL makes me uncomfortable, since the directives do
not seem to compose. For example, it would be nice to compose ONLY
and ADD-PREFIX.
However, this objection might be unfounded. In fact, I think there is
a misprint in the document. Shouldn't <X-set> be <import-set> in
this snippet?
<import-set> = <lib-path>
| (only <X-set> <identifier>*)
| (except <X-set> <identifier>*)
| (add-prefix <X-set> <identifier>)
| (rename <X-set> (<identifier> <identifier>)*)
- It would be more general, and would simplify the IMPORT DSL, if one could
specify arbitrary computations on imported identifiers. Something like
(import "scheme" (lambda (symbol)
(case symbol
((car) 'scheme:car)
((cdr) 'scheme:cdr)
(else #f))))
from http://www.het.brown.edu/people/andre/macros/srfi-module.htm.
However, you may have other reasons for preferring a syntactic DSL.
- It would be nice if the toplevel could also be considered an implicit
library. But the no-shadowing and no-redefinition rule would
seem to preclude this.
- Can I export an unbound identifier? For example, can I export
literals (such as ELSE, UNQUOTE, etc.), or does this not even make
sense.
Another potential application of this would be to make a module
that "undefines" some bindings from "scheme://r6rs" to make a restricted
language.
Regards
Andre