\documentclass[nocolor,memo]{j3}
\renewcommand{\hdate}{2 January 2004}
\renewcommand{\vers}{J3/04-164}
\usepackage{lineno}
\usepackage{longtable}
\usepackage{xr}
\externaldocument{007}
\input pdftest
\begin{document}
\vspace{-10pt}
\begin{tabbing}
Subject: \hspace*{0.25in}\=Types as type parameters\\
From: \>Van Snyder\\
Reference: \>03-258r1, section 2.2.4\\
\end{tabbing}
\pagewiselinenumbers
\leftlinenumbers
\linenumbers*
\section{Number}
TBD
\section{Title}
Types as type parameters.
\section{Submitted By}
J3
\section{Status}
For consideration.
\section{Basic Functionality}
Expand the type parameter system to include types.
\section{Rationale}
The arguments for doing this are similar to the arguments for a
parameterized module facility: Many algorithms can be applied to more
than one type. This proposal is an anemic attempt to provide support for
that requirement. It is a backup to the proposal to provide a
parameterized module facility (or one of equivalent functionality but
different foundation). Although this would be desirable in the event no
parameterized module facility is provided, it has the same fundamental
problems of integration with type-bound procedures that arise from kind
type parameters. If a parameterized module facility is provided, this
proposal should not be pursued.
\section{Estimated Impact}
Small to moderate. Most of the changes will be in Section 4, but changes
will also be needed in Section 12, and maybe Section 16.
\section{Detailed Specification}
Expand the type parameter system to include types. This will require a
declaration that a type parameter is a type, and changes in the discussion
of argument association to account for a type parameter that is a type.
Type parameters that are types can themselves have parameters, including
parameters that are types, etc.
\subsection{Example}
{\tt\begin{verbatim}
TYPE :: T ( U, V, K, L )
TYPE :: U, V ! Doesn't introduce a new type because type definitions don't nest
INTEGER, KIND :: K, L
TYPE(U(V(K),L)) :: COMPONENT
END TYPE T
\end{verbatim}}
Type T has a parameter U, which is a type that has a parameter that is a
type, specified by V, which has a kind parameter specified by K. U also
has a kind parameter specified by L.
\section{History}
\label{lastpage}
\end{document}