% Copyright The Numerical Algorithms Group Limited 1991.
% Certain derivative-work portions Copyright (C) 1988 by Leslie Lamport.
% All rights reserved

\begin{page}{helpExpose}{Exposure}
\beginscroll
Exposure determines what part of the \Language{} library
is available to you when using \Language{}.
At any time during your interactive \Language{} session,
each constructor is either {\em exposed} or {\em unexposed}.
If a constructor is exposed, its operations are available to
the interpreter and therefore to you.
If a constructor is unexposed, the operations are not seen
by the interpreter and thus not available to you.
\par
If you are a beginner, you may only want
basic parts of the library exposed.
If you are an expert, you may want to have all parts of the
library exposed.
If you have an application that requires
only a segment of the library, you may want to arrange to expose
only that segment for your use.
\par
\endscroll
Additional Information:
\beginmenu
\menulink{What}{ExposureDef}\tab{8}What is an exposure group?
\menulink{System}{ExposureSystem}\tab{8}What exposure groups are system defined?
% \menulink{User}{ExposureUser}\tab{8}How can I define my own?
\menulink{Details}{ExposureDetails}\tab{8}Some details on exposure
\endmenu
\end{page}

\begin{page}{ExposureSystem}{System Defined Exposure Groups}
\beginscroll
Exposure is defined by {\em groups}.
Groups have names.
Seven exposure groups are system-defined:\beginmenu
\item\tab{3}{\em current}\tab{12}The currently active exposure group
\item\tab{3}{\em basic}\tab{12}The default value of {\em current}
\item\tab{3}{\em category}\tab{13}Category constructors not in {\em basic}
\item\tab{3}{\em domain}\tab{13}Domain constructors not in {\em basic}
\item\tab{3}{\em package}\tab{13}Package constructors not in {\em basic}
\item\tab{3}{\em default}\tab{13}Default constructors not in {\em basic}
\item\tab{3}{\em hidden}\tab{13}All constructors not in {\em basic}
\item\tab{3}{\em naglink}\tab{13}All constructors used in the AXIOM NAG Link
\endmenu
\par
When you first use \Language{}, the {\em current} exposure group is
set to {\em basic} and {\em naglink}. Using \HyperName{} or the system command
{\em expose}, you may
change the current exposure group by
adding or dropping constructors or by setting {\em current}
to an exposure group you have created.
\endscroll
Additional Information:
\beginmenu
\menulink{What}{ExposureDef}\tab{10}What is an exposure group?
%\menulink{User}{ExposureUser}\tab{10}How you can define your own exposure group
\endmenu
\end{page}

\begin{page}{ExposureDef}{What is an Exposure Group?}
\beginscroll
\par
An exposure group is a list of constructors to be exposed.
Those constructors on the list are exposed;
those not on the list are not exposed.
The library contains 4 kinds of constructors intuitively described as follows:
\beginmenu
\item\menuitemstyle{}{\em domain}\tab{10}Describes computational objects and functions defined on these objects
\item\menuitemstyle{}{\em package}\tab{10}Describes functions which will work over a variety of domains
\item\menuitemstyle{}{\em category}\tab{10}Names a set of operations
\item\menuitemstyle{}{\em default}\tab{10}Provides default functions for a cateogry
\endmenu

An exposure group is defined by three lists:
\beginmenu
\item\menuitemstyle{}{\em groups}\tab{13}A list of other (more basic) groups
\item\menuitemstyle{}{\em additions}\tab{13}A list of explicit constructors to be included
\item\menuitemstyle{}{\em subtractions}\tab{13}A list of explicit constructors to be dropped
\endmenu
You can define your own exposure groups: give them names and define the
three above lists to be anything you like.
Using \HyperName{}, you can conveniently edit your exposure groups,
install them as the {\em current} exposure, and so on.
\endscroll
\end{page}

\begin{page}{ExposureDetails}{Details on Exposure}
\beginscroll
Exposure is generally defined by the set of domain and package constructors
you want to have available.
Category and default constructors are generally implied.
A category constructor is exposed if mentioned by {\em any} other constructor
(including another category).
A default constructor is exposed if its corresponding category constructor is exposed.
\par
If you explicitly add a domain or package
constructor, its name will be put in an {\em Additions} list.
The system will also add automatically to the {\em Additions} list
any category explicity exported by that domain or package.
If that category has a corresponding default constructor, that
default constructor will also be added as well.
\par
If you like, you can explicitly drop a constructor.
Any such name is added to the {\em Subtractions} list.
The system will drop this name from the {\em Additions} list if it appears.
\par
If the package or domain takes arguments from an unexported
domain or declares that its arguments can come from a domain
which is a member of an unexported category, these constructors
will {\em not} be added.
\endscroll
\end{page}
