Was steht drin?
Das Buch beginnt mit einem kurzen Überblick über Programmierparadigmen; in unseren Curricula, in denen die Ab- und Ausrichtung der Absolventen auf Berufsfähigkeit im Vordergrund steht, ist naturgemäß für diese eher historischen Reflektionen wenig Platz. Gleichwohl ist es wichtig zu wissen, wie sich die Dinge entwickelt haben: Objektorientierte oder funktionale Sprachen sind nicht vom Himmel gefallen, diese Paradigmen sind vielmehr Ergebnis einer Entwicklung, die sich fortsetzt, mit der Konsequenz, daß weder die Objektorientierung noch die funktionale Programmierung der glänzende Ziel- oder Endpunkt einer Entwicklung sein werden. In Kapitel 1 werden auch gleich die ersten Schritte in Haskell gemacht und kommentiert. Das umfaßt (anonyme) Funktionen und Curryfizierung, Typklassen, Module und Paare. Kapitel 2 diskutiert Listen als die fundamentale Datenstruktur von Haskell, hier werden die fundamentalen Techniken besprochen, Links- und Rechtsfaltungen werden eingeführt. Kapitel 3 diskutiert erste Anwendungen: Es werden Zahlenfolgen als unendliche Listen dargestellt, die Vignère-Verschlüsselung wird diskutiert und einer erste Lösung wird, wie man im Objektorientierten sagen würde, refaktorisiert. Algebraische Datentypen werden in Kapitel 4 eingeführt, zur Verdeutlichung werden einige dann schon umfangreichere Beispiele (Mengen, Cliquen in Graphen, Algorithmus von Kruskal zur Berechnung minimaler Gerüste) besprochen. Wie die Ein-Ausgabe in das funktionale Paradigma eingegliedert wird zeigt Kapitel 5, hier wird auch die Vignère-Verschlüsselung noch einmal aufgenommen und mit Dateien diskutiert; die Persistent von Datenstrukturen wird ebenfalls angesprochen. Kapitel 6 ist ein Potpourri von Beispielen; es beginnt mit der Diskussion der Huffman-Codierung, geht weiter mit einem automaten-basierten Verfahren zur Erkennung von Mustern in Texten und zeigt schließlich, wie ein Parser-Generator für eine einfache Klasse von kontextfreien Grammatiken konstruiert werden kann. Das Kapitel macht sichtbar, daß sich Haskell auch als Sprache zum Prototyping eignet. Schließlich werden Monaden in Kapitel 7 eingeführt und durch einige Beispiele erläutert; wir diskutieren die Zustandsmonade mit ihren Anwendungen auf das Acht-Damen-Problem und auf die Konstruktion eines (wirklich ziemlich kleinen) Parsers zum rekursiven Abstieg. Im Anhang A sind einige Hinweise zur sehr regen, aktiven und hilfsbereiten Haskell-Welt zu finden.
Das Buch beginnt mit einem kurzen Überblick über Programmierparadigmen; in unseren Curricula, in denen die Ab- und Ausrichtung der Absolventen auf Berufsfähigkeit im Vordergrund steht, ist naturgemäß für diese eher historischen Reflektionen wenig Platz. Gleichwohl ist es wichtig zu wissen, wie sich die Dinge entwickelt haben: Objektorientierte oder funktionale Sprachen sind nicht vom Himmel gefallen, diese Paradigmen sind vielmehr Ergebnis einer Entwicklung, die sich fortsetzt, mit der Konsequenz, daß weder die Objektorientierung noch die funktionale Programmierung der glänzende Ziel- oder Endpunkt einer Entwicklung sein werden. In Kapitel 1 werden auch gleich die ersten Schritte in Haskell gemacht und kommentiert. Das umfaßt (anonyme) Funktionen und Curryfizierung, Typklassen, Module und Paare. Kapitel 2 diskutiert Listen als die fundamentale Datenstruktur von Haskell, hier werden die fundamentalen Techniken besprochen, Links- und Rechtsfaltungen werden eingeführt. Kapitel 3 diskutiert erste Anwendungen: Es werden Zahlenfolgen als unendliche Listen dargestellt, die Vignère-Verschlüsselung wird diskutiert und einer erste Lösung wird, wie man im Objektorientierten sagen würde, refaktorisiert. Algebraische Datentypen werden in Kapitel 4 eingeführt, zur Verdeutlichung werden einige dann schon umfangreichere Beispiele (Mengen, Cliquen in Graphen, Algorithmus von Kruskal zur Berechnung minimaler Gerüste) besprochen. Wie die Ein-Ausgabe in das funktionale Paradigma eingegliedert wird zeigt Kapitel 5, hier wird auch die Vignère-Verschlüsselung noch einmal aufgenommen und mit Dateien diskutiert; die Persistent von Datenstrukturen wird ebenfalls angesprochen. Kapitel 6 ist ein Potpourri von Beispielen; es beginnt mit der Diskussion der Huffman-Codierung, geht weiter mit einem automaten-basierten Verfahren zur Erkennung von Mustern in Texten und zeigt schließlich, wie ein Parser-Generator für eine einfache Klasse von kontextfreien Grammatiken konstruiert werden kann. Das Kapitel macht sichtbar, daß sich Haskell auch als Sprache zum Prototyping eignet. Schließlich werden Monaden in Kapitel 7 eingeführt und durch einige Beispiele erläutert; wir diskutieren die Zustandsmonade mit ihren Anwendungen auf das Acht-Damen-Problem und auf die Konstruktion eines (wirklich ziemlich kleinen) Parsers zum rekursiven Abstieg. Im Anhang A sind einige Hinweise zur sehr regen, aktiven und hilfsbereiten Haskell-Welt zu finden.