\begin{slide}{Rekursiv definierte Typen}

Haskell (\url{http://haskell.org/})
\begin{verbatim}
data Tree a = Leaf a 
            | Branch ( Tree a ) ( Tree a )
data List a = Nil | Cons a ( List a )
\end{verbatim}

Java  
\begin{verbatim}
interface Tree<A> { }
class Leaf<A> implements Tree<A> { A key }
class Branch<A> implements Tree<A> 
  { Tree<A> left, Tree<A> right }
\end{verbatim}

das ist ein \emph{algebraischer Datentyp},

die Konstruktoren (Leaf, Nil) bilden die Signatur der Algebra,

die Elemente der Algebra sind Terme (Bäume)
  
\end{slide}
