Index: doc/refrat/Makefile
===================================================================
--- doc/refrat/Makefile	(revision bfee4484ec1bf80d775fb8ea3b6ec84c12bf8496)
+++ doc/refrat/Makefile	(revision 20e409e93fce6611eba969494080400b3e96257e)
@@ -32,5 +32,5 @@
 
 clean :
-	rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t \
+	rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t *.cf \
 		${FIGURES} ${PICTURES} ${PROGRAMS} ${GRAPHS} ${basename ${DOCUMENT}}.ps ${DOCUMENT}
 
@@ -58,4 +58,7 @@
 	${LaTeX} ${basename $@}.tex
 
+predefined :
+	sed -f predefined.sed ${basename ${DOCUMENT}}.tex > ${basename $@}.cf
+
 ## Define the default recipes.
 
Index: doc/refrat/predefined.sed
===================================================================
--- doc/refrat/predefined.sed	(revision bfee4484ec1bf80d775fb8ea3b6ec84c12bf8496)
+++ doc/refrat/predefined.sed	(revision 20e409e93fce6611eba969494080400b3e96257e)
@@ -1,5 +1,5 @@
-/\\predefined/,/\\end{lstlisting}/ !d
-/\\begin{lstlisting}/,/\\end{lstlisting}/ s/\\use{.*}//g
-/\\predefined/ d
-/\\begin{lstlisting}/ d
-/\\end{lstlisting}/ d
+/^\\predefined/,/^\\end{lstlisting}/ !d
+/^\\begin{lstlisting}/,/^\\end{lstlisting}/ s/@\\use{.*}@//g
+/^\\predefined/ d
+/^\\begin{lstlisting}/ d
+/^\\end{lstlisting}/ d
Index: doc/refrat/refrat.tex
===================================================================
--- doc/refrat/refrat.tex	(revision bfee4484ec1bf80d775fb8ea3b6ec84c12bf8496)
+++ doc/refrat/refrat.tex	(revision 20e409e93fce6611eba969494080400b3e96257e)
@@ -254,27 +254,25 @@
 \subsubsection{Semantics}
 
-CFA provides a capability for generic types; using this capability a single "generic type generator"
-can be written that can represent multiple concrete type instantiations by substitution of the "type
-parameters" of the generic type for concrete types. Syntactically a generic type generator is
-represented by putting a forall specifier on a struct or union declaration, as defined in section
-6.7.2.5. An instantiation of the generic type is written by specifying the type parameters in
-parentheses after the name of the generic type generator, as in the following example:
-\begin{lstlisting}
-forall( type T ) struct pair {
+\CFA provides a capability for generic types; using this capability a single "generic type
+generator" can be written that can represent multiple concrete type instantiations by substitution
+of the "type parameters" of the generic type for concrete types. Syntactically a generic type
+generator is represented by putting a forall specifier on a struct or union declaration, as defined
+in \VRef{forall}. An instantiation of the generic type is written by specifying the type parameters
+in parentheses after the name of the generic type generator:
+\begin{lstlisting}
+forall( type T | sumable( T ) ) struct pair {
 	T x;
 	T y;
 };
-
 pair( int ) p = { 3, 14 };
 \end{lstlisting}
 
 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall
-specifier on the type generator declaration. The instantiation then has the semantics that would
-result if the type parameters were substituted into the type generator declaration by macro
-substitution.
+specifier on the type generator declaration, e.g., \lstinline$sumable$. The instantiation then has
+the semantics that would result if the type parameters were substituted into the type generator
+declaration by macro substitution.
 
 Polymorphic functions may have generic types as parameters, and those generic types may use type
-parameters of the polymorphic function as type parameters of the generic type, as in the following
-example:
+parameters of the polymorphic function as type parameters of the generic type:
 \begin{lstlisting}
 forall( type T ) void swap( pair(T) *p ) {
