Archiv 8. Juli 2005

Wem Englisch als Sprache für Einsteigerliteratur nicht so liegt, es gibt einen deutschsprachigen Haskell Kurs online zum Durcharbeiten. Sieht ganz leidlich aus - allerdings finde ich das ein bischen wenig erklärt wird.

grössere Haskell-Sourcen

Wer wie ich lieber Sourcen durchwühlt um Sprachen zu lernen, hier ein paar grössere Haskell-Projekte zur Auswahl:

  • [Haskell User-Submitted Libraries][0] ist eine Sammlung von teilweise schon älteren aber trotzdem interessanten Haskell-Projekten. Downloadbar ist ein IRC-Bot und im CVS ist auch noch ein Webserver mit Plugin-Schnittstelle.
  • [Pugs][1] ist eine Perl 6 Implementation in Haskell. [Hatte ich schon mal][2], ist immer noch cool |:-)|
  • [darcs][3] ist ein verteiltes Sourceverwaltungssystem. [Hatte ich auch schon mal][4], ist aber auch immer noch cool.

Helium - Haskell-Lehr-System

Helium ist ein Haskell-Subset-Compiler der speziell für die Lehre entwickelt wurde. Er liefert ausführlichere Fehlermeldungen und analysiert Sourcen weitergehend um diese Meldungen möglich zu machen. Allerdings ist es wirklich nur ein Subset von Haskell - und da Typklassen fehlen, fehlt ein ziemlich wichtiger Teil. Um aber überhaupt erstmal in die funktionale Programmierung reinzuschnuppern ist das ganz brauchbar.

Als Textbücher bieten sich The Craft of Functional Programming und The Haskell School of Expression an. Hab mir beide mal bestellt - meine Haskell-Kenntnisse sind mehr als primitiv und hoffnungslos veraltet (sofern das bei einer doch recht jungen Sprache wie Haskell überhaupt geht ).

Manchmal treibt mich DarwinPorts zur Verzweiflung

Zum Beispiel wenn ich ghc (einen Haskell-Compiler) installieren will, aber der als erstes mal Perl 5.8 installieren will. Als ob ich unter Tiger nicht schon ein durchaus brauchbares Perl 5.8.6 auf der Platte hätte, nein, die DarwinPorts wollen eigene Versionen davon. Und dann hab ich je nach Pfadeinstellung mal das Apple-Perl oder eben das von DarwinPorts aktiv. Ziemlich dämlich - ich finde da müssten in die DarwinPorts Pseudopakete rein, die dann auf die vorinstallierten Versionen von Apple verweisen.

Das macht ganz besonders dann Probleme, wenn man selber auch Pakete so von Hand installiert. Denn dann wird teilweise das über den Pfad erreichbare Perl genommen - und mit aktiven DarwinPorts ist das halt das dort. Was aber absolut nicht der gewünschte Effekt ist - schliesslich ist das Perl in diesem Fall nur deshalb reingekommen, weil der Port für ghc eine build-dependency hat. Ich will aber garnicht das DarwinPorts Perl benutzen ...

Aus dem gleichen Grund sind die ganzen Python und Ruby Module in DarwinPorts IMHO unbrauchbar: sie ziehen automatisch eine neue Installation von Python und Ruby nach sich und nutzen nicht die vorinstallierte Version. Selten dämlich ...

Im Ergebnis kann man DarwinPorts auf einer OS X Kiste nur für gut isolierte Tools benutzen - was aber irgendwie schade ist, denn die Idee und die Umsetzung an sich ist ziemlich klasse. Nur wird halt zu wenig Rücksicht auf die schon installierten Sachen genommen.

ghc hab ich übrigens einfach über das Binary-Paket von haskell.org installiert. Da steht zwar das sei für 10.3, tuts aber auch mit 10.4 - jedenfalls das was ich damit mache. Und erspart mir das ganze Zeugs zu builden.

Eines der komplizierteren Haskell-Themen sind die Monads - ein Weg um in einer rein funktionalen Sprache mit lazy evaluation trotzdem Dinge wie Seiteneffekte und Sequentialität zu simulieren - einfach weil man zum Beispiel dann doch gelegentlich den Output vor dem Input haben möchte, wenn man Daten vom Benutzer abfragt, oder zum Beispiel sich einen Zustand wegsichern will der später wieder aufgerufen wird. Das Tutorial hilft beim Verständnis des Konzeptes der Monads.