Platform · Documentation · Hoogle · Kursmaterialien »

Real World Haskell (SS 2013)

Für die Teilnahme ist ein Notebook erforderlich. Vor der Veranstaltung sollten die Teilnehmer sich bereits die Haskell Platform auf ihren Rechnern installiert haben (mindestens 2012.2.0.0, -> Debian 7.0+, -> Ubuntu 12.10+, -> Gentoo, -> Fedora F18+).

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.

Organisatorisches

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