Martin Thoma 11 роки тому
батько
коміт
e7e4f64df5

+ 1 - 0
documents/Programmierparadigmen/Arbeitszeit.md

@@ -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

+ 10 - 0
documents/Programmierparadigmen/Haskell.tex

@@ -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

BIN
documents/Programmierparadigmen/Programmierparadigmen.pdf


+ 15 - 0
documents/Programmierparadigmen/Vorwort.tex

@@ -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.

+ 36 - 0
documents/Programmierparadigmen/figures/haskell-type-classes.tex

@@ -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}

+ 31 - 0
tikz/haskell-type-classes/Makefile

@@ -0,0 +1,31 @@
+SOURCE  = haskell-type-classes
+DELAY   = 80
+DENSITY = 300
+WIDTH   = 512
+
+make:
+	pdflatex $(SOURCE).tex -output-format=pdf
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot
+
+gif:
+	pdfcrop $(SOURCE).pdf
+	convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif
+	make clean
+
+png:
+	make
+	make svg
+	inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png
+
+transparentGif:
+	convert $(SOURCE).pdf -transparent white result.gif
+	make clean
+
+svg:
+	#inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg
+	pdf2svg $(SOURCE).pdf $(SOURCE).svg
+	# Necessary, as pdf2svg does not always create valid svgs:
+	inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg

+ 3 - 0
tikz/haskell-type-classes/Readme.md

@@ -0,0 +1,3 @@
+Compiled example
+----------------
+![Example](geometry-1.png)

+ 42 - 0
tikz/haskell-type-classes/haskell-type-classes.tex

@@ -0,0 +1,42 @@
+\documentclass[varwidth=false, border=2pt]{standalone}
+\usepackage{tikz}
+\usetikzlibrary{shapes}
+
+\begin{document}
+\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}
+\end{document}