\begin{slide}{Gesetze für Monaden (I)}

Monade $m$ $\Rightarrow$ Kleisli-Kategorie von $m$:
\begin{itemize}
\item Objekte: Typen
\item Pfeile: von $a$ nach $m \; b$
\end{itemize}
Komposition der Pfeile ist so definiert:
\begin{verbatim}
comp :: Monad m 
   => (a -> m b) -> (b -> m c) -> (a -> m c)
comp f g = \ x -> do y <- f x ; g y
\end{verbatim}
Eine Monade muß erfüllen:
\begin{itemize}
\item \verb|return| ist neutral für \verb|comp|
\item \verb|comp| ist assoziativ
\end{itemize}


\end{slide}

\begin{slide}{Gesetze für Monaden (II)}

  \begin{itemize}
  \item Gesetze für die Instanzen von List und Maybe überprüfen
  \item Gibt es eine korrekte Instanz für binäre Bäume?
    \begin{itemize}
    \item mit Schlüsseln in Branch und nicht in Leaf
    \item mit Schlüsseln in Leaf und nicht in Branch
    \end{itemize}
  \item Gib eine inkorrekte Instanz für List, Maybe, Tree, die \dots
    \begin{itemize}
    \item typkorrekt ist
    \item genau eines der Gesetze verletzt
    \end{itemize}
  \end{itemize}

\end{slide}
