\def\Haskell{\textsc{Haskell}\xspace}
\def\eol{\setlength\parskip{0pt}\par}
\def\indent#1{\noindent\kern#1}
\def\cst#1{\textsf{#1}}

\achapter{\protect{Type Classes}}
\aauthor{Matthieu Sozeau}
\label{typeclasses}

\begin{flushleft}
  \em The status of Type Classes is (extremelly) experimental.
\end{flushleft}

This chapter presents a quick reference of the commands related to type
classes. It is not meant as an introduction to type classes altough it
may become one in the future. For an actual introduction, there is a
description of the system \cite{sozeau08} and the literature on type
classes in \Haskell which also applies.

\asection{Class and Instance declarations}

The syntax for class and instance declarations is a mix between the
record syntax of \Coq~and the type classes syntax of \Haskell:
\def\kw{\texttt}
\def\classid{\texttt}

\begin{multicols}{2}{
\medskip
  \kw{Class} \classid{Id} $(\alpha_1 : \tau_1) \cdots (\alpha_n : \tau_n)$ :=
  \eol\indent{3.00em}$\cst{f}_1 : \phi_1$ ;
  \eol\indent{4.00em}\vdots
  \eol\indent{3.00em}$\cst{f}_m : \phi_m$.
\medskip}
{
  
  \medskip
  \kw{Instance} \classid{Id} $t_1 \cdots t_n$ :=
  \eol\indent{3.00em}$\cst{f}_1 := b_1$ ;
  \eol\indent{4.00em}\vdots
  \eol\indent{3.00em}$\cst{f}_m := b_m$.
  \medskip}
\end{multicols}

\begin{coq_eval}
  Reset Initial.
\end{coq_eval}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "Reference-Manual"
%%% compile-command: "make -C ../.. -f Makefile.stage3 doc/refman/Reference-Manual.pdf"
%%% End: 
