\newcommand{\Fob}{F_{\text{ob}}}
\newcommand{\Fmo}{F_{\text{mo}}}
\newcommand{\id}{\operatorname{id}}

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

Kategorie der Datentypen:
\begin{itemize}
\item Objekte (Punkte): Typen 
\item Morphismen (Pfeile): (einstellige) Funktionen
\end{itemize}
Funktor $F$ von Kategorie $A$ nach Kategorie $B$
\begin{itemize}
\item $\Fob$ : (Objekt in $A$) $\mapsto$ (Objekt in $B$)
\item $\Fmo$ : (Pfeil $x \to y$ in $A$) 
  $\mapsto$ (Pfeil $\Fob(x) \to \Fmo(y)$ in $B$)
\end{itemize}
so daß
\begin{itemize}
\item $\Fmo(\id)=\id$
\item $\Fmo((x\to y)\circ(y\to z))=\Fmo(x\to y)\circ\Fmo(y\to z)$
\end{itemize}

\end{slide}


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

Für Instanzen der Typklasse Functor muß gelten:

\begin{verbatim}
fmap id == id
fmap (f . g) = fmap p . fmap g
\end{verbatim}

\bigskip
Aufgaben: finde falsche Funktor-Instanzen 
\begin{itemize}
\item für \verb|List, Maybe, Tree|, die
\item 
  \begin{itemize}
  \item keines
    \item nur das erste
      \item nur das zweite
  \end{itemize}
  Gesetz erfüllen (das sind 9 Aufgaben)
\end{itemize}


\end{slide}
