diff --git a/doc/src/module.tex b/doc/src/module.tex index c8da646..d4e1e0a 100644 --- a/doc/src/module.tex +++ b/doc/src/module.tex @@ -132,6 +132,14 @@ The configuration language consists of top-level defining forms for \>\altz{}~ \tt(\syn{name} \syn{type}) \\ \>\altz{}~ \tt((\arbno{\syn{name}}) \syn{type}) \\ \syn{structure} \=\goesto{}~ \syn{name} \\ + \>\altz{}~ \tt(modify \syn{structure} \arbno{\syn{modifier}}) \\ + \>\altz{}~ \tt(subset \syn{structure} (\arbno{\syn{name}})) \\ + \>\altz{}~ \tt(with-prefix \syn{structure} \syn{name}) \\ + \syn{modifier} \=\goesto{}~ \tt(expose \arbno{\syn{name}}) \\ + \>\altz{}~ \tt(hide \arbno{\syn{name}}) \\ + \>\altz{}~ \tt(rename \arbno{(\syn{name}$_0$ \syn{name}$_1$)}) \\ + \>\altz{}~ \tt(alias \arbno{(\syn{name}$_0$ \syn{name}$_1$)}) \\ + \>\altz{}~ \tt(prefix \syn{name}) \\ \end{tabbing} \caption{The configuration language.} \end{figure} @@ -156,19 +164,58 @@ For building structures that export structures, there is a {\tt defpackage} Many other structures, such as record and hash table facilities, are also available in the \hack{} implementation. -An {\tt access} clause specifies which bindings of names to structures -will be visible inside the package body for use in {\tt structure-ref} -forms. {\tt structure-\ok{}ref} has the following syntax: -\begin{tabbing} -\qquad \syn{expression} \goesto{}~ - \tt(structure-ref \syn{struct-name} \syn{name}) -\end{tabbing} -The \syn{struct-name} must be the name of an {\tt access}ed structure, -and \syn{name} must be something that the structure exports. Only -structures listed in an {\tt access} clause are valid in a {\tt -structure-ref}. If a package accesses any structures, it should -probably open the {\tt structure-refs} structure so that the {\tt -structure-ref} operator itself will be available. +The \codemainindex{{modify}}, \codemainindex{{subset}}, and + \codemainindex{{prefix}} forms produce new + views on existing structures by renaming or hiding exported names. +\code{Subset} returns a new structure that exports only the listed names + from its \syn{structure} argument. +\code{With-prefix} returns a new structure that adds \syn{prefix} + to each of the names exported by the \syn{structure} argument. +For example, if structure \code{s} exports \code{a} and \code{b}, + then +\begin{example} +(subset s (a)) +\end{example} + exports only \code{a} and +\begin{example} +(with-prefix s p/) +\end{example} +exports \code{a} as \code{p/a} and \code{b} as \code{p/b}. + +Both \code{subset} and \code{with-prefix} are simple macros that + expand into uses of \code{modify}, a more general renaming form. +In a \code{modify} structure specification the \syn{command}s are applied to + the names exported + by \syn{structure} to produce a new set of names for the \syn{structure}'s + bindings. +\code{Expose} makes only the listed names visible. +\code{Hide} makes all but the listed names visible. +\code{Rename} makes each \syn{name}$_0$ visible as \syn{name}$_1$ + name and not visible as \syn{name}$_0$ , while + \code{alias} makes each \syn{name}$_0$ visible as both \syn{name}$_0$ + and \syn{name}$_1$. +\code{Prefix} adds \syn{name} to the beginning of each exported name. +The modifiers are applied from right to left. Thus +\begin{example} +(modify scheme (prefix foo/) (rename (car bus)))) +\end{example} + makes \code{car} available as \code{foo/bus}.. + +% Use modify instead of structure-ref. +% +%An {\tt access} clause specifies which bindings of names to structures +%will be visible inside the package body for use in {\tt structure-ref} +%forms. {\tt structure-\ok{}ref} has the following syntax: +%\begin{tabbing} +%\qquad \syn{expression} \goesto{}~ +% \tt(structure-ref \syn{struct-name} \syn{name}) +%\end{tabbing} +%The \syn{struct-name} must be the name of an {\tt access}ed structure, +%and \syn{name} must be something that the structure exports. Only +%structures listed in an {\tt access} clause are valid in a {\tt +%structure-ref}. If a package accesses any structures, it should +%probably open the {\tt structure-refs} structure so that the {\tt +%structure-ref} operator itself will be available. The package's body is specified by {\tt begin} and/or {\tt files} clauses. {\tt begin} and {\tt files} have the same semantics, except