\begin{slide}{Vereinigung mittels Interfaces}

$I$ repräsentiert die Vereinigung von $A$ und $B$:
\begin{verbatim}
interface I { }
class A implements I { int foo; }
class B implements I { String bar; }
\end{verbatim}

\bigskip
Notation dafür in Scala (\url{http://scala-lang.org/})
\begin{verbatim}
abstract class I
case class A (foo : Int) extends I
case class B (bar : String) extends I
\end{verbatim}
Verarbeitung durch \emph{Pattern matching}
\begin{verbatim}
def g (x : I): Int = x match {
    case A(f) => f + 1
    case B(b) => b.length()  }
\end{verbatim}


\end{slide}
