Moderne Funktionale Programmierung
Vorlesung
- dienstags, 2. Block, LG1A/121 (Hofstedt)
Übung
- dienstags, 3. Block, LG1A/121 (Jeltsch)
6 Credit-Points
Studiengänge
- Informatik, Diplom (Säule „Grundlagen der Informatik“)
- Informatik, Bachelor (Komplex „Grundlagen der Informatik“)
- Informations- und Medientechnik, Master (Komplex „Methodische Grundlagen“)
- Angewandte Mathematik, Master (Anwendungsfach)
Inhalt
In der Veranstaltung werden moderne funktionale Programmiertechniken behandelt. Gegenstand sind u.a. die Themen Parserkombinatoren, Typklassen, funktionale Datenstrukturen, monadische Programmierung und die Implementierung paralleler Systeme. Dabei verwenden wir Haskell als Referenzsprache.
Die Veranstaltung umfasst u.a. folgende Themengebiete:
- theoretische und praktische Grundlagen funktionaler Sprachen und der funktionalen Programmierung
- funktionale Algorithmen (Funktionen höherer Ordnung, funktionale Scanner und Parser, Fixpunkte, Gleichungssysteme und transitive Hüllen)
- Typisierung und Typklassen
- funktionale Datenstrukturen
- Monaden
- nebenläufige und parallele Programmierung
Literatur
- P. Pepper; P. Hofstedt:
Funktionale Programmierung. Sprachdesign und Programmiertechnik. Springer, 2006. - P. Pepper: Funktionale Programmierung in OPAL, ML, HASKELL und GOFER. Springer, 2003.
Weitere Literaturhinweise wurden in der Veranstaltung gegeben.
Dokumentation
Haskell
Haskell allgemein
Bücher
Tutorials
Spezifikation von Haskell inklusive grundlegender Bibliotheken
erweiterter Satz von Bibliotheken
leistungsstarke API-Suche
GHC-Benutzerhandbuch
Opal
Agda
Softwareinstallation
Haskell
In der Regel ist es am besten, die
Haskell Platform zu installieren. Diese enthält u.a. den
Glasgow Haskell Compiler und das Programm
cabal-install, mit dem bei Bedarf Haskell-Programme und -Bibliotheken von
Hackage installiert werden können.
Für einige Linux-Distribitionen wird die Haskell Platform noch nicht (richtig) unterstützt. Benutzer von Ubuntu 10.4 können auch die Pakete ghc6 und cabal-install installieren. Fehlende Haskell-Software kann dann bei Bedarf mittels cabal-install nachinstalliert werden.
Opal
Benötigt wird das
Opal Compilation System. Es gibt
Pakete für verschiedene Linux-Distributionen sowie eine
Live-CD namens Opalix.
Agda
Die
Installationsanleitung führt unterschiedliche Installationsvarianten auf.
Nutzer von Ubuntu 10.4 und 10.10 können die Pakete agda-mode und agda-stdlib installieren. Agda benötigt eine ganze Reihe von Haskell-Bibliotheken, welche vom Ubuntu-Paketmanager als systemweite Cabal-Pakete installiert werden. Es kann passieren, dass cabal-install die gleichen Pakete in der gleichen Version außerdem für einen einzelnen Nutzer installiert. In diesem Fall wird Agda versuchen, die nutzerbezogenen Installationen zu verwenden, was fehlschlägt. Man erhält dann die Fehlermeldung:
Problem encountered. The *ghci* buffer can perhaps explain why.
Im Puffer *ghci* findet man dann u.a eine Meldung der folgenden Art:
cannot satisfy -package Agda-2.2.6: Agda-2.2.6-6853bd28846ffbb61eaa62b6ffc7dafa is unusable due to missing or recursive dependencies: haskeline-0.6.2.2-23b1e9bba1851dd0ba590fc60cb5ef38
Dieses Problem kann man folgendermaßen beheben:
- mittels der Kommandozeile ghc-pkg field Agda id die ID der installierten Agda-Bibliothek bestimmen
- Emacs starten und eine Datei mit Endung *.agda öffnen oder anlegen
- Options → Customize Emacs → Specific Option… wählen
- agda2-ghci-options eingeben
- den Eintrag -package Agda-2.2.6 durch -package-id $ID ersetzen, wobei statt $ID die oben ermittelte ID zu verwenden ist
- unter dem Eingabefeld State → Save for Future Sessions wählen
- ggf. Emacs neu starten
Prüfungstermine
Prüfungsform: mündliche Prüfung
Prüfungszeiträume: hier
