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

Weitere Literaturhinweise wurden in der Veranstaltung gegeben.

Dokumentation

Haskell

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:

  1. mittels der Kommandozeile ghc-pkg field Agda id die ID der installierten Agda-Bibliothek bestimmen
  2. Emacs starten und eine Datei mit Endung *.agda öffnen oder anlegen
  3. OptionsCustomize EmacsSpecific Option… wählen
  4. agda2-ghci-options eingeben
  5. den Eintrag -package Agda-2.2.6 durch -package-id $ID ersetzen, wobei statt $ID die oben ermittelte ID zu verwenden ist
  6. unter dem Eingabefeld StateSave for Future Sessions wählen
  7. ggf. Emacs neu starten

Prüfungstermine

Prüfungsform: mündliche Prüfung
Prüfungszeiträume: hier