Index: doc/user/user.tex
===================================================================
--- doc/user/user.tex	(revision 4ab767abc16d92a1e1194b2c0a764e62c193dac0)
+++ doc/user/user.tex	(revision 62006a3b91df05be204eecb450e2061cb6540191)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Sat May  8 08:51:33 2021
-%% Update Count     : 5062
+%% Last Modified On : Mon May 31 09:03:34 2021
+%% Update Count     : 5071
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -29,6 +29,4 @@
 \usepackage{epic,eepic}
 \usepackage{upquote}									% switch curled `'" to straight
-\usepackage{calc}
-\usepackage{varioref}									% extended references
 \usepackage[labelformat=simple,aboveskip=0pt,farskip=0pt]{subfig}
 \renewcommand{\thesubfigure}{\alph{subfigure})}
@@ -37,24 +35,4 @@
 \usepackage{mathptmx}                                   % better math font with "times"
 \usepackage[usenames]{color}
-\usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
-\usepackage{breakurl}
-
-\renewcommand\footnoterule{\kern -3pt\rule{0.3\linewidth}{0.15pt}\kern 2pt}
-
-\usepackage[pagewise]{lineno}
-\renewcommand{\linenumberfont}{\scriptsize\sffamily}
-\usepackage[firstpage]{draftwatermark}
-\SetWatermarkLightness{0.9}
-
-% Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
-% removes it as a variable-name character so keywords in variables are highlighted. MUST APPEAR
-% AFTER HYPERREF.
-\renewcommand{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}
-
-\setlength{\topmargin}{-0.45in}							% move running title into header
-\setlength{\headsep}{0.25in}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
 \newcommand{\CFALatin}{}
 % inline code ©...© (copyright symbol) emacs: C-q M-)
@@ -67,7 +45,27 @@
 \usepackage{common}										% common CFA document macros
 %\input{common}											% common CFA document macros
+\usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
+\usepackage{breakurl}
+
+\renewcommand\footnoterule{\kern -3pt\rule{0.3\linewidth}{0.15pt}\kern 2pt}
+
+\usepackage[pagewise]{lineno}
+\renewcommand{\linenumberfont}{\scriptsize\sffamily}
+\usepackage[firstpage]{draftwatermark}
+\SetWatermarkLightness{0.9}
+
+% Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
+% removes it as a variable-name character so keywords in variables are highlighted. MUST APPEAR
+% AFTER HYPERREF.
+\renewcommand{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}
+
+\setlength{\topmargin}{-0.45in}							% move running title into header
+\setlength{\headsep}{0.25in}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 \setlength{\gcolumnposn}{3in}
 \CFAStyle												% use default CFA format-style
-\lstset{language=CFA}									% CFA default lnaguage
+%\lstset{language=CFA}									% CFA default lnaguage
 \lstnewenvironment{C++}[1][]                            % use C++ style
 {\lstset{language=C++,moredelim=**[is][\protect\color{red}]{®}{®},#1}}
@@ -168,5 +166,5 @@
 In contrast, \CFA has 30 years of hindsight and a clean starting point.
 
-Like \Index*[C++]{\CC{}}, there may be both an old and new ways to achieve the same effect.
+Like \Index*[C++]{\CC{}}, there may be both old and new ways to achieve the same effect.
 For example, the following programs compare the C, \CFA, and \CC I/O mechanisms, where the programs output the same result.
 \begin{center}
@@ -260,5 +258,5 @@
 The signature feature of \CFA is \emph{\Index{overload}able} \Index{parametric-polymorphic} functions~\cite{forceone:impl,Cormack90,Duggan96} with functions generalized using a ©forall© clause (giving the language its name):
 \begin{cfa}
-®forall( otype T )® T identity( T val ) { return val; }
+®forall( T )® T identity( T val ) { return val; }
 int forty_two = identity( 42 ); $\C{// T is bound to int, forty\_two == 42}$
 \end{cfa}
@@ -293,9 +291,9 @@
 which can be augmented simply with a polymorphic, type-safe, \CFA-overloaded wrappers:
 \begin{cfa}
-forall( otype T | { int ?<?( T, T ); } ) T * bsearch( T key, const T * arr, size_t size ) {
+forall( T | { int ?<?( T, T ); } ) T * bsearch( T key, const T * arr, size_t size ) {
 	int comp( const void * t1, const void * t2 ) { /* as above with double changed to T */ }
 	return (T *)bsearch( &key, arr, size, sizeof(T), comp ); }
 
-forall( otype T | { int ?<?( T, T ); } ) unsigned int bsearch( T key, const T * arr, size_t size ) {
+forall( T | { int ?<?( T, T ); } ) unsigned int bsearch( T key, const T * arr, size_t size ) {
 	T * result = bsearch( key, arr, size ); $\C{// call first version}$
 	return result ? result - arr : size; } $\C{// pointer subtraction includes sizeof(T)}$
@@ -532,5 +530,5 @@
 Keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism:
 \begin{cfa}
-int ®``®otype = 3; $\C{// make keyword an identifier}$
+int ®``®coroutine = 3; $\C{// make keyword an identifier}$
 double ®``®forall = 3.5;
 \end{cfa}
@@ -613,7 +611,7 @@
 The exponentiation operator is available for all the basic types, but for user-defined types, only the integral-computation version is available.
 \begin{cfa}
-forall( otype T | { void ?{}( T & this, one_t ); T ?*?( T, T ); } )
+forall( T | { void ?{}( T & this, one_t ); T ?*?( T, T ); } )
 T ?®\®?( T ep, unsigned int y );
-forall( otype T | { void ?{}( T & this, one_t ); T ?*?( T, T ); } )
+forall( T | { void ?{}( T & this, one_t ); T ?*?( T, T ); } )
 T ?®\®?( T ep, unsigned long int y );
 \end{cfa}
@@ -865,6 +863,6 @@
   case 1:  case 2:  case 3:
 	...
-	®// implicit end of switch (break)
-  ®case 5:
+	$\R{\LstCommentStyle{// implicit end of switch (break)}}$
+  case 5:
 	...
 	®fallthru®; $\C{// explicit fall through}$
@@ -2778,5 +2776,5 @@
 For example, the C quick-sort is wrapped into the following polymorphic \CFA routine:
 \begin{cfa}
-forall( otype T | { int ?<?( T, T ); } )
+forall( T | { int ?<?( T, T ); } )
 void qsort( const T * arr, size_t dimension );
 \end{cfa}
@@ -3239,5 +3237,5 @@
 The integration of polymorphism, type assertions, and monomorphic specialization of tuple-assertions are a primary contribution of this thesis to the design of tuples.
 \begin{cfa}
-forall(otype T, dtype U)
+forall(T, dtype U)
 void f(T x, U * y);
 
@@ -3247,8 +3245,8 @@
 The argument matching algorithm binds ©T© to ©int© and ©U© to ©const char©, and calls the function as normal.
 
-Tuples can contain otype and dtype components.
+Tuples can contain polymorphic types.
 For example, a plus operator can be written to add two triples of a type together.
 \begin{cfa}
-forall(otype T | { T ?+?(T, T); })
+forall(T | { T ?+?(T, T); })
 [T, T, T] ?+?([T, T, T] x, [T, T, T] y) {
 	return [x.0+y.0, x.1+y.1, x.2+y.2];
@@ -3268,7 +3266,7 @@
 Furthermore, these calls can be made ambiguous by introducing seemingly different functions.
 \begin{cfa}
-forall(otype T | { T ?+?(T, T); })
+forall(T | { T ?+?(T, T); })
 [T, T, T] ?+?([T, T] x, [T, T, T, T]);
-forall(otype T | { T ?+?(T, T); })
+forall(T | { T ?+?(T, T); })
 [T, T, T] ?+?(T x, [T, T, T, T, T]);
 \end{cfa}
@@ -3294,5 +3292,5 @@
 \begin{cfa}
 int f([int, double], double);
-forall(otype T, otype U | { T f(T, U, U); })
+forall(T, U | { T f(T, U, U); })
 void g(T, U);
 g(5, 10.21);
@@ -7381,14 +7379,14 @@
 \leavevmode
 \begin{cfa}[aboveskip=0pt,belowskip=0pt]
-forall( otype T | { int ?<?( T, T ); } ) $\C{// location}$
+forall( T | { int ?<?( T, T ); } ) $\C{// location}$
 T * bsearch( T key, const T * arr, size_t dim );$\indexc{bsearch}$
 
-forall( otype T | { int ?<?( T, T ); } ) $\C{// position}$
+forall( T | { int ?<?( T, T ); } ) $\C{// position}$
 unsigned int bsearch( T key, const T * arr, size_t dim );
 
-forall( otype T | { int ?<?( T, T ); } )
+forall( T | { int ?<?( T, T ); } )
 void qsort( const T * arr, size_t dim );$\indexc{qsort}$
 
-forall( otype E | { int ?<?( E, E ); } ) {
+forall( E | { int ?<?( E, E ); } ) {
 	E * bsearch( E key, const E * vals, size_t dim );$\indexc{bsearch}$ $\C{// location}$
 	size_t bsearch( E key, const E * vals, size_t dim );$\C{// position}$
@@ -7399,5 +7397,5 @@
 }
 
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) {
+forall( K, E | { int ?<?( K, K ); K getKey( const E & ); } ) {
 	E * bsearch( K key, const E * vals, size_t dim );
 	size_t bsearch( K key, const E * vals, size_t dim );
@@ -7408,5 +7406,5 @@
 }
 
-forall( otype E | { int ?<?( E, E ); } ) {
+forall( E | { int ?<?( E, E ); } ) {
 	void qsort( E * vals, size_t dim );$\indexc{qsort}$
 }
@@ -7428,5 +7426,5 @@
 double abs( double _Complex );
 long double abs( long double _Complex );
-forall( otype T | { void ?{}( T *, zero_t ); int ?<?( T, T ); T -?( T ); } )
+forall( T | { void ?{}( T *, zero_t ); int ?<?( T, T ); T -?( T ); } )
 T abs( T );
 \end{cfa}
@@ -7465,8 +7463,8 @@
 \leavevmode
 \begin{cfa}[aboveskip=0pt,belowskip=0pt]
-forall( otype T | { int ?<?( T, T ); } ) T min( T t1, T t2 );$\indexc{min}$
-forall( otype T | { int ?>?( T, T ); } ) T max( T t1, T t2 );$\indexc{max}$
-forall( otype T | { T min( T, T ); T max( T, T ); } ) T clamp( T value, T min_val, T max_val );$\indexc{clamp}$
-forall( otype T ) void swap( T * t1, T * t2 );$\indexc{swap}$
+forall( T | { int ?<?( T, T ); } ) T min( T t1, T t2 );$\indexc{min}$
+forall( T | { int ?>?( T, T ); } ) T max( T t1, T t2 );$\indexc{max}$
+forall( T | { T min( T, T ); T max( T, T ); } ) T clamp( T value, T min_val, T max_val );$\indexc{clamp}$
+forall( T ) void swap( T * t1, T * t2 );$\indexc{swap}$
 \end{cfa}
 
