Real World Haskell (SS 2013)
Aktuelles (Neues zuerst)
Bitte nehmt an der Lehrevaluation Teil! Ihr bekommt dazu ein Token
zugesendet mit dem ihr die Veranstaltung bewerten, kritisieren, loben
könnt.
Der Kurs endet bereits am Donnerstag, den 8. August 2013.
Zur Beendigung des Kurses gehen wir gemeinsam am Donnerstag Nachmittag
in die Luise.
Wir wurden wieder zurück umgezogen in den Hörsaal B, und da werden wir auch bleiben.
Leider muss der Kurs kurzfristig umziehen! Neuer Raum für die ersten beiden Wochen:
Hörsaal A (1.3.14) (Arnimalle 14)
Bitte tragt euch alle auf der
Mailingliste ein:
Der Raum steht jetzt fest:
Arnimallee 14 HS B (0.1.01)
(im Physik-Gebäude, Erdgeschoss, selbe Seite der Arnimallee wie unser
Informatik-Institut).
Kurs 19618 im KVV
Hinweis: Es gibt eine Warteliste, d.h. ihr könnt euch, wenn es keine freien Plätze gibt, trotzdem einschreiben und rückt automatisch nach, sollten Leute den Kurs vor Beginn verlassen! Also tragt euch bei Interesse bitte ein!
Inhalt
Die Haskell-Programmiersprache hat in den letzten Jahren einen
breiten Einsatz in der Softwareindustrie
gefunden (Compiler-,
Interpreterbau,
Prototyping,
Versionsverwaltungssystemen,
verteilte Systeme,
Webprogrammierung,
Entwicklung korrekter Software usw.).
In diesem Kurs soll eine Vertiefung grundlegender Haskell-Konzepte diskutiert werden,
um Haskell als Sprache für die Entwicklung realler Anwendungen verwenden zu können.
- Wiederholung und Vertiefung grundlegender Haskell-Konzepte
- Was ist funktionale Programmierung?
- Auswertungsstrategien: strict, non-strict, lazy
- Tail recursion vs. guarded recursion
- Typsystem und Typherleitung
- Sequentielle Programmierung
- Die IO Monade - kontrollierbare Nebeneffekte
- Stateful computations and mutable data: State Monad
- Steuerung des Kontrollflusses mit Continuations
- Entwurf und Umsetzung größerer Haskell-Programme
- Effektives Testen mit QuickCheck
- Haskell-Toolchain: ghc, cabal, darcs, haddock
- Monad Transformers
- Nichtsequentielle Programmierung
- Parallel and Concurrent Haskell (Par-Monade, MVar, Chan)
- Software Transactional Memory
- Netzwerkprogrammierung
- Anwendungen
- GUI-Programmierung / Animationen
- Datenbankanbindung
- Webprogrammierung
Organisatorisches
- Beginn: 22. Juli
- Ende:
9. Juli 8. Juli
- jeweils montags bis donnerstags von 10 (s.t.) - 15 Uhr (mit Mittagspause 12 bis 13 Uhr)
- im HS B (0.1.01), Auftaktveranstaltung in Hörsaal A (im Obergeschoss der Physik)
Termine
1. Woche
- 22. Juli
-
Einführung (Pflichttermin)
Wiederholung Haskell; Haskell-Toolchain:
cabal install
,
Hoogle.
-> 1. Übung, Slides, webserver.hs, Tokenize.hs, calculator.hs (gestrige Lösungen).
- 23. Juli
-
Monaden, Monaden, Monaden: Maybe und State.
Fehlerbehandlung mit der Either-Monade.
-> 2. Übung,
Monaden.lhs (Mitschrift als Literate Haskell),
state.lhs (eval4).
Paper:
The essence of functional programming (VPN only)
Links:
Functors, Applicatives, And Monads In Pictures
- 24. Juli
-
Fortführung Monaden (IO, Id, Entweder, Maybe)
Netzwerk-Programmierung –
Das network
package
Grafik-Programmierung mit Gloss
(API Dokumentation).
-> 3. Übung, Haskell Quelltexte.
- 25. Juli
-
Nachbesprechung Echo-Server, ein Chat-Server, Gloss und Interaktivität
Recap: Was haben wir diese Woche gelernt?
Vorbesprechung 1. Projekt, Vorstellung der Projekte
-> Haskell Quelltexte.
Projekt I
- 26. Juli
-
Die Projekte sind online.
- Ergebnisse
-
Pong (Markus, Felix, Mehmed, Thierry)
Snake (Luca, Lars, Felix)
Snake (Rene, Patricia, Morris)
Space Invaders (Yusuf, Benjamin, Michael)
Game of Life (Julian F.)
2. Woche
- 29. Juli
-
Projektpräsentationen
-> 4. Übung
Paper: Introduction to Parallel and Concurrent Haskell
- 30. Juli
-
Fortführung Parallel and Concurrent Haskell (API Dokumentation)
Software Transactional Memory (API Dokumentation)
-> 5. Übung,
Mitschrift,
Key-Value-Store Musterlösung
(sequentiell, mittels MVar, und mittels STM)
Links:
Locks, Actors, And STM In Pictures
- 31. Juli
-
Monad Transformers
Parsec
(API Dokumentation)
-> 6. Übung,
ParsecBeispiel.hs,
ParsecBeispiel mit IO statt Identity
Paper: Monad Transformers Step By Step
Links:
Using Parsec im Real World Haskell Buch (ein CSV Parser),
Haskell vs. Erlang for bittorent clients
- 1. August
-
Programmentwurf in Haskell
Recap: Was haben wir in den vergangenen zwei Wochen gelernt?
Vorbesprechung 2. Projekt
-> While Virtual Machine, Compiler, und Interpreter
Links:
Monad Transformers im Real World Haskell Buch,
Hulk: A Haskell IRC Server
Projekt II
- 2. August
-
Die Projekte sind online: Projekte
-
- Ergebnisse
-
Die Ergebnisse findet ihr unter http://page.mi.fu-berlin.de/scravy/realworldhaskell/tag9/
3. Woche
- 5. August
-
Projektpräsentationen
Wdh. ungetypter Lambda-Kalkül, Einführung einfach getypter Lambda-Kalkül, Typherleitung
-> 7. Übung
- 6. August
-
Haskell-Erweiterungen:
- existentielle Typen in Haskell
(GHC
User Guide),
- generalisierte algebraische Datentypen (GADTs)
(Haskellwiki,
Wikipedia,
Wikibooks,
GHC User Guide),
- Multi Parameter Type Classes
(GHC User Guide),
- Functional Dependencies
(GHC
User Guide),
- Associated Types / Type Families
(GHC User Guide)
-> 8. Übung,
(inkomplette) Mitschrift,
Lösungen der Aufgaben 1 bis 3
- 7. August
-
QuickCheck, Unit Testing in Haskell
Strict State Threads (pure imperative programming in Haskell)
Mutable Arrays in Haskell
Fallstudie: Die Java-Monade
-> 9. Übung,
Matrix.hs,
MatrixST (skeleton),
Kommentierte Musterlösung
- 8. August
- Wunschthemen
Mögliche Themen
- Profiling, Optimierung in Haskell
- Refactoring und Best Practices
- Scrap Your Boilerplate / Generic Programming in Haskell
(Paper,
Slides)
- Lenses (Slides,
Hackage,
GitHub)
- Iteratee I/O (Haskellwiki)
- Machines (Slides,
Hackage,
GitHub)
Übung 10
Scheinkriterien (ABV, 4 ECTS)
- Aktive Teilnahme
-
Die aktive Teilnahme erhält, wer während den Übungsterminen mind. 60%
der Übungsaufgaben bearbeitet. Um die Übungsaufgaben zu bearbeiten
wird ein Notebook vorausgesetzt!
- Regelmäßige Teilnahme
-
Die regelmäßige Teilnahme erhält, wer an n - 2 der regulären Termine
anwesend ist. Die Teilnahme am ersten Termin ist Pflicht.
- Prüfung
-
Die Note ergibt sich aus den zwei Projekten (je 50%).
Literatur & Links
- Real World Haskell
-
by Bryan O'Sullivan, Don Stewart, and John Goerzen
O'Reilly Media, November 2008
Online lesen
- The essence of functional programming
-
by Philip Wadler, Invited talk, 19'th Symposium on Principles of Programming Languages, ACM Press, Albuquerque, January 1992
Homepage,
PostScript,
PDF
- Don't fear the Monad
-
by Brian Beckman
youtube.com/watch?v=ZhuHCtR3xq8