2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-25 22:38:04 +02:00

Haskell Type hierarchy

This commit is contained in:
Martin Thoma 2014-02-02 11:59:07 +01:00
parent 7d278dd745
commit e7e4f64df5
8 changed files with 138 additions and 0 deletions

View file

@ -6,3 +6,4 @@ in dem Erstellen dieses Skripts steckt:
|01.02.2014 | 13:30 - 13:45 | Thoma | Initialisierung; Grobe Struktur
|01.02.2014 | 14:00 - 14:45 | Thoma | ASCII-Tabelle in C angefangen; Kapitel "Programmiersprachen" hinzugefügt; erste Definitionen
|01.02.2014 | 14:45 - 15:30 | Thoma | Haskell angefangen
|01.02.2014 | 11:15 - 11:45 | Thoma | Haskell Class Hierachy

View file

@ -21,6 +21,16 @@ Haskell kann unter \href{http://www.haskell.org/platform/}{\path{www.haskell.org
für alle Plattformen heruntergeladen werden. Unter Debian-Systemen
ist das Paket \texttt{ghc} bzw. \texttt{haskell-platform} relevant.
\section{Typen}
Siehe \cref{fig:haskell-type-hierarchy}:
\begin{figure}[htp]
\centering
\resizebox{0.9\linewidth}{!}{\input{figures/haskell-type-classes.tex}}
\caption{Hierarchie der Haskell Standardklassen}
\label{fig:haskell-type-hierarchy}
\end{figure}
\section{Syntax}
\subsection{Klammern}
Haskell verzichtet an vielen Stellen auf Klammern. So werden im

View file

@ -5,6 +5,18 @@ in der Klausur als Nachschlagewerk zu dienen; es soll jedoch auch
vorher schon für die Vorbereitung genutzt werden können und nach
der Klausur als Nachschlagewerk dienen.
Ein Link auf das Skript ist unter \href{http://martin-thoma.com/programmierparadigmen-klausur/}{\path{martin-thoma.com/programmierparadigmen-klausur/}}
zu finden.
\section*{Anregungen, Verbesserungsvorschläge, Ergänzungen}
Noch ist das Skript im Aufbau. Es gibt viele Baustellen und es ist
fraglich, ob ich bis zur Klausur alles in guter Qualität bereitstellen
kann. Daher freue ich mich über jeden Verbesserungsvorschlag.
Anregungen, Verbesserungsvorschläge und Ergänzungen können per
Pull-Request gemacht werden oder mir per Email an info@martin-thoma.de
geschickt werden.
\section*{Was ist Programmierparadigmen?}
TODO
@ -13,3 +25,6 @@ TODO
Grundlegende Kenntnisse vom Programmieren, insbesondere mit Java,
wie sie am KIT in \enquote{Programmieren} vermittelt werden, werden
vorausgesetzt.
Die Unifikation wird wohl auch in \enquote{Formale Systeme}
erklärt; das könnte also hier von Vorteil sein.

View file

@ -0,0 +1,36 @@
\begin{tikzpicture}
\tikzstyle{node}=[ellipse,thick,fill=white,draw=black,inner sep=0pt,text width=3cm,align=center]
\tikzstyle{edge}=[->, ultra thick]
\matrix[row sep=0.5cm,column sep=0.5cm] {
\node[node] (Eq) {\textbf{Eq}\\All except IO, (->)}; &
\node[node] (Show) {\textbf{Show}\\All except IO, (->)}; &
\node[node] (Read) {\textbf{Read}\\All except IO, (->)}; \\
\node[node] (Ord) {\textbf{Ord}\\All except IO, (->), IOError}; &
\node[node] (Num) {\textbf{Num}\\Int, Integer, Float, Double}; &
\node[node] (Bounded) {\textbf{Bounded}\\Int, Char, Bool, (), Ordering, tuples}; \\
\node[node] (Enum) {\textbf{Enum}\\{\small (), Bool, Char, Ordering, Int, Integer, Float, Double}}; &
\node[node] (Real) {\textbf{Real}\\Int, Integer, Float, Double}; &
\node[node] (Fractional) {\textbf{Fractional}\\Float, Double}; \\
\node[node] (Integral) {\textbf{Integral}\\Int, Integer}; &
\node[node] (RealFrac) {\textbf{RealFrac}\\Float, Double}; &
\node[node] (Floating) {\textbf{Floating}\\Float, Double}; \\
\node[node] (Monad) {\textbf{Monad}\\IO, (), Maybe}; &
\node[node] (RealFloat) {\textbf{RealFloat}\\Float, Double}; &
\\
\node[node] (MonadPlus) {\textbf{MonadPlus}\\IO, (), Maybe}; &
\node[node] (Functor) {\textbf{Functor}\\IO, (), Maybe}; &
\\
};
\draw[edge] (Eq) -- (Ord);
\draw[edge] (Eq) -- (Num);
\draw[edge] (Show) -- (Num);
\draw[edge] (Ord) -- (Real);
\draw[edge] (Num) -- (Real);
\draw[edge] (Num) -- (Fractional);
\draw[edge] (Enum) -- (Integral);
\draw[edge] (Real) -- (Integral);
\draw[edge] (Real) -- (RealFrac);
\draw[edge] (Floating) -- (RealFloat);
\draw[edge] (RealFrac) -- (RealFloat);
\draw[edge] (Monad) -- (MonadPlus);
\end{tikzpicture}