HaskellKurs

Zurück zur Liste der KursAngebote und zum ZeitPlan.

HaskellKurs

Der Kurs gibt eine Einführung in die Programmiersprache Haskell und zeigt, wie praktische Programmierprobleme in Haskell elegant gelöst werden können. Der erste Teil des Kurses vermittelt Grundkenntnisse in Haskell. Im zweiten Teil wird im Team eine GUI-basierte Anwendung zum Lesen von RSS-Feeds erstellt. Dazu werden Bibliotheken zur Netzwerk-, GUI-, XML- und nebenläufiger Programmierung vorgestellt und eingesetzt.

Wer glaubt, Haskell sei eine langweilige akademische Sprache, die zu nichts außer Listenmanipulationen zu gebrauchen ist, wird in diesem Kurs eines besseren belehrt. Projekt wie [WWW] Darcs und [WWW] Pugs zeigen, dass sich mit Haskell Programme schreiben lassen, die in anderen Sprachen nur mit wesentlich mehr Aufwand erstellt werden können. So ist Pugs die derzeitig einzige ernstzunehmende Implementierung von Perl6. Auch interessant ist was David Roundy, der Autor von Darcs, in einem [WWW] Interview schreibt:

It is a little-known fact that the first implementation of darcs was actually in C++. However, after working on it for a while, I had an essentially solid mass of bugs, which was very hard to track down. In all honesty, the biggest problem was that when I started, I didn't really understand the theory of patches, so the algorithms themselves were all buggy. However, after spending six months or so writing a code that was impossible to debug, I didn't feel like rewriting it in the same way.

At the time, I had been looking into Haskell, since functional languages are quite interesting. I had written a toy code or two, just to see if I would be annoyed by the syntax, and thought it would be worth trying Haskell for the next attempt at darcs. I had recently had a traumatic experience with python, and really wanted to learn a strictly typed language that was a bit more friendly than C or C++.

Haskell is just a great language in which to program. It is purely functional, and lazy, both of which allow you to do really cool tricks. For example, by using lazy IO I can cleanly separate the file and directory reading, from the patch-applying (which is pure functional code), from the file or directory writing. Haskell also is a really good match for implementing the primitive patch operations, with its pattern-matching syntax and higher order functions.

Da Haskell keine Seiteneffekte kennt, lässt sich die Sprache auch hervorragend für nebenläufiges Programmieren einsetzen, was in Zeiten von DualCore Prozessoren wichtig ist. So schreibt z.B. Tim Sweeney von [WWW] Epic Games: In a concurrent world, imperative is the wrong default! ([WWW] The Next Mainstream Programming Language: A Game Developer's Perspective, invited talk at POPL'06)

Kursprofil

Thema: Praktischer Programmierkurs Haskell

Veranstalter: MatthiasNeubauer und StefanWehr

Veranstaltungsart: Kurs (Theorie und Praxisübungen)

Termin: Montag, 7. August bis Mittwoch, 9. August vormittags und Donnerstag, 10. August/Freitag, 11. August ganztags (siehe ZeitPlan)

Ort: Gebäude 101, Raum 01-016

Schwierigkeitsgrad: {*}{*}{o}

Voraussetzungen: Programmierkenntnisse

(Das Veranstaltungsprofil kann nur von Kursleitern geändert werden; dazu bitte einloggen.)

Teilnehmer

  1. PhillipLinkenheil (/!\ Konflikt mit PHPFortgeschrittenenKurs)
  2. NicoDietrich
  3. benusbecker
  4. MarkusDegen
  5. ChristophBetz
  6. MatthiasHeizmann
  7. DavidLeuschner
  8. JohannesHorstmann
  9. BenjaminUdiljak

Die Teilnehmerzahl dieser Veranstaltung ist auf 10 Personen beschränkt. Bei Überbelegung bilden die in rot dargestellten Personen die Warteliste.
Die Veranstaltung findet nur statt, sofern sich mindestens 6 Personen anmelden.

<!> Um Dich für diesen Kurs anzumelden, musst Du Dich zunächst beim Sommercampus-Wiki einloggen.

Detailliertes Kursprogramm

In den ersten 3. Blöcken des Kurses werden folgende Themen behandelt.

Diese Themengebiete werden durch kleinere Übungsaufgaben praktisch vertieft.

In den restlichen 4 Blöcken des Kurses soll gemeinsam ein GUI-basiertes Programm zum Lesen von RSS-Feeds erstellt werden. Dazu werden wir Kleingruppen bilden, die jeweils eine Komponente des Programms implementieren.

Zeitplan

Folien

Folien für Kapitel 1 bis 9 sind von [WWW] Graham Hutton, wir haben lediglich kleinere Veränderungen vorgenommen. Unter [WWW] http://proglang.informatik.uni-freiburg.de/teaching/haskell-kurs-2006/ gibt es PDF Versionen der Folien.

  1. Kapitel: Einleitung (16 Folien)

  2. Kapitel: Erste Schritte (19 Folien)

  3. Kapitel: Typen und Klassen (24 Folien)

  4. Kapitel: Ausdrücke und Definitionen (19 Folien)

  5. Kapitel: Rekursive Funktionen (7 Folien)

  6. Kapitel: Funktionen höherer Ordnung (16 Folien)

  7. Kapitel: Parserkombinatoren (26 Folien)

  8. Kapitel: IO (13 Folien)

  9. Kapitel: Typsynonyme und Datentypen (26 Folien)

  10. Kapitel: Typklassen

  11. Kapitel: Monaden

  12. Kapitel: Tool- und Projektvorstellung

    • Module (S)

    • wxHaskell (S)

    • Cabal (S)

    • darcs (S)

    • Control.Concurrent (M)

    • HaXML, SAX-Parser, Parsec (M)

    • RSS, Atom (M)

    • Code Walkthrough (M)

Nützliche Links / APIs



Software

Die Software, die wir einsetzen werden, ist auf den Poolrechner schon komplett vorinstalliert.

Falls Ihr trotzdem auf einem eigenen Rechner programmieren wollt, braucht Ihr für die ersten drei Tage einzig und alleine ein Haskell-System und einen Editor. Beispielsweise tut es

Für den zweiten Teil des Kurses, unser gemeinsames Programmierprojekt, verwenden wir das Versionsmangementsystem darcs, die Grafikbibliothek wxWidgets, und das Haskell-System GHC mit einigen Zusatzbibliotheken:

Bei Fragen zur Installation helfen wir Euch gerne weiter.

(X)Emacs Haskell-Modus

Der Haskell-Modus von Prof. Thiemann ist unter /home/proglang/public/haskell-modus/haskell-mode.el zu finden. Zur Benutzung im XEmacs muss folgendes zur eigenen XEmacs-Initialisierungsdatei ~/.xemacs/init.el hinzugefügt werden:

(add-to-list 'load-path "/home/proglang/public/haskell-modus")

(setq auto-mode-alist
      (append '(("\\.[hg]s$"  . haskell-mode)
                ("\\.hi$"     . haskell-mode)
                ("\\.l[hg]s$" . haskell-mode))
              auto-mode-alist))

(autoload 'haskell-mode "haskell-mode"
  "Major mode for editing Haskell scripts." t)

(defun my-haskell-constants ()
  ;; (setq haskell-prog-switches '())
  ;; (setq haskell-import-path '("."))
  )

(setq haskell-mode-hook 'my-haskell-constants)

Aufgaben

HaskellKurs/Exercises

Kommentare

Fragen und Anregungen zum Kurs? Hier ist Platz dafür vorgesehen. Der Sommercampus lebt von Deiner Mithilfe!