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
Darcs und
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
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
Epic Games: In a concurrent world, imperative is the wrong default! (
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: ![]()
![]()
![]()
Voraussetzungen: Programmierkenntnisse
(Das Veranstaltungsprofil kann nur von Kursleitern geändert werden; dazu bitte einloggen.)
Teilnehmer
- PhillipLinkenheil (
Konflikt mit PHPFortgeschrittenenKurs) - NicoDietrich
- benusbecker
- MarkusDegen
- ChristophBetz
- MatthiasHeizmann
- DavidLeuschner
- JohannesHorstmann
- 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.
Grundkonzepte in Haskell: Funktionen, Listen, Typen, Typklassen, Monaden, Module
Programmieren mit I/O
Programmieren mit Threads
Bibliotheken zur Netzwerk-, GUI- und XML-Programmierung
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
Montag
9:00 - 9:55
Kapitel 1,2 (M)
9:55 - 10:30
Übung
10:30 - 10:45
PAUSE
10:45 - 12:15
Kapitel 3,4 (S)
12:15 - 12:45
Übung
12:45 - 13:00
Kapitel 5 (M)
Dienstag
9:00 - 9:30
Kapitel 6 (S)
9:30 - 10:00
Übung
10:00 - 10:50
Kapitel 7 (M)
10:50 - 11:05
PAUSE
11:05 - 12:00
Übung
12:00 - 12:30
Kapitel 8 (M)
12:30 - 13:00
Übung
Mittwoch
9:00 - 9:45
Kapitel 9 (M)
9:45 - 10:30
Übung
10:30 - 10:45
PAUSE
10:45 - 12:00
Kapitel 10,11 (S)
12:00 - 13:00
Übung
Folien
Folien für Kapitel 1 bis 9 sind von
Graham Hutton, wir haben lediglich kleinere Veränderungen vorgenommen. Unter
http://proglang.informatik.uni-freiburg.de/teaching/haskell-kurs-2006/ gibt es PDF Versionen der Folien.
Kapitel: Einleitung (16 Folien)
Kapitel: Erste Schritte (19 Folien)
Kapitel: Typen und Klassen (24 Folien)
Kapitel: Ausdrücke und Definitionen (19 Folien)
Kapitel: Rekursive Funktionen (7 Folien)
Kapitel: Funktionen höherer Ordnung (16 Folien)
Kapitel: Parserkombinatoren (26 Folien)
Kapitel: IO (13 Folien)
Kapitel: Typsynonyme und Datentypen (26 Folien)
Kapitel: Typklassen
Kapitel: Monaden
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
GHC Benutzerhandbuch
http://www.haskell.org/ghc/docs/latest/html/users_guide/ Haskell98 Online-Report
http://www.haskell.org/onlinereport/ Haskell Standard-Bibliothek
http://www.haskell.org/ghc/docs/latest/html/libraries/ Haskell HTTP Package
http://www.haskell.org/http/api/ Haskell Xml Toolbox
http://www.fh-wedel.de/~si/HXmlToolbox/hdoc/ wxHaskell
http://wxhaskell.sourceforge.net/doc/ wxWidgets
http://www.wxwindows.org/manuals/2.6.3/wx_contents.html
XML 1.1 Spec
http://www.w3.org/TR/xml11/ XML Namespaces
http://www.w3.org/TR/REC-xml-names/
Atom Syndication Format
http://www.atomenabled.org/developers/syndication/atom-format-spec.php RSS 0.91
http://backend.userland.com/rss091 RSS 0.92
http://backend.userland.com/rss092
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:
wxWidgets
http://www.wxwidgets.org/ GHC 6.4.2
http://www.haskell.org/ghc/ plus Haskell HTTP package
http://www.haskell.org/http/ wxHaskell
http://wxhaskell.sourceforge.net/ + unicode patch
http://wiki.loria.fr/wiki/GenI/Getting_GenI/Unicode HaXML 1.16
http://www.cs.york.ac.uk/fp/HaXml-devel/ Haskell XML Toolbox
http://www.fh-wedel.de/~si/HXmlToolbox/
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
Kommentare
Fragen und Anregungen zum Kurs? Hier ist Platz dafür vorgesehen. Der Sommercampus lebt von Deiner Mithilfe!