haskell

Schon lange keine Programmiersprachenlinks mehr gepostet: Haskell for Mac ist eine interaktive Programmierumgebung für Haskell auf dem Mac (sagt ja der Name schon). Interessant, da es eine Art Notebook-Interface bietet mit dem man interaktiv Code entwickelt und direkt ausprobiert und die Ergebnisse visualisieren kann. Zum Rumspielen mit Haskell ganz interessant, aber ich weiss nicht, ob das 25 Dollar wert ist - speziell das von Apple erzwungene Sandboxing kann da nämlich schnell nervig werden. Und da es Yosemite voraussetzt, werd ich es eh nicht ausprobieren können.

Write Yourself a Haskell... in Lisp 17 February 2013. Sowas begeistert mich ja immer, auch wenn ich zugeben muss, dass ich aller Wahrscheinlichkeit nach nix damit machen werde. Trotzdem, interessant zu lesen.

hoc - Project Hosting on Google Code. Nur mal so geblogmarkt, falls ich doch mal wieder mit Haskell spielen will. HOC ist eine Bridge zwischen Haskell und Objective-C und erlaubt damit Zugriff auf die OSX Frameworks.

Monads Are Not Metaphors - Code Commit. Definitiv eine der besseren Erklärungen was ein Monad ist, die ich gelesen habe.

Web Authoring System Haskell (WASH) - nur der Vollständigkeit halber auch verlinkt, es ist vergleichbar zu Ur/Web und Ocsigen, nur halt mit Haskell. Aber wirkt irgendwie noch mehr Stückwerk als aus einem Guss.

Real World Haskell - das hatte ich noch garnicht gelinkt? Dabei ist das der komplette Inhalt von "Real World Haskell" im Web, dem O'Reilly Buch zu Haskell. Sollte ich mir mal in ein paar ruhigen Stunden (Tagen?) durchlesen.

Understanding Haskell Monads - von allen Tutorials die ich bisher darüber gesehen habe, für mich das verständlichste.

Software Tools in Haskell - simple und einfache Kommandozeilenprogramme in Haskell. Endlich mal ein Tutorial, welches schlichte und einfache, aber vollständige Programme und nicht nur Programmfragmente als Grundlage hat.

Downloading Hugs - muss halt doch mal wieder mit Haskell spielen (und wieder mal an dieser verqueren Sprache scheitern ...). Und es gibt eine recht nette Windows-Version vom "kleinen" Interpreter Hugs - wär vielleicht was für meinen Eee-PC.

Yhc/Erlang/Proof of concept - interessantes Projekt, welches Haskell nach Erlang Bytecode (BEAM) übersetzt und so das Mischen von Haskell und Erlang Code ermöglicht.

Frag - ein 3D first-person-shooter in Haskell.

Frag - 3D-Ego-Shooter in Haskell. Man stelle sich das vor.

Haskell vs. Erlang in einem Beispielprojekt - ausführlicher Post über Haskell und Erlang in einem Projekt mit recht spezifischen Anforderungen (binäres Protkoll, sehr viele Threads). Interessante Einsichten in die Stärken von Erlang.

QuickCheck: An Automatic Testing Tool for Haskell - interessanter Ansatz für automatisches Testen. Die Eigenschaften von Funktionen werden direkt im Code abgelegt und der Test testet nicht einfach vordefinierte Testfälle, sondern durchläuft die Eigenschaftsdefinitionen mit zufällig generierten Werten.

HOC: A Haskell to Objective-C Binding - sogar für Haskell gibt es eine Objective-C Bridge, die ich noch nicht kannte.

HsShellScript ist eine Haskell-Library mit der man Shell-Script-typische Probleme mit Haskell lösen kann. Also Funktionen zur Steuerung von Prozessen und Zugriff auf Systeminformationen etc. Sieht sehr nett aus, lässt sich wegen fehlendem mntent.h aber leider nicht auf OS X compilieren.

mod_haskell ist leider seit Jahren nicht mehr weiter entwickelt worden - es bietet eine Integration von Hugs und ghc in den Apache-Server.

Regular Expressions in Haskell ist eine Implementation von Regular Expressions komplett in Haskell.

Web Authoring System Haskell (WASH) ist eine Sammlung von Haskell-Libraries (genauer gesagt DSLs - domain specific langugages - in Haskell) zur Programmierung von Webanwendungen. Enthalten ist CGI-style Programmierung, HTML-Generierung, Mailhandling und Datenbanktreiber für PostgreSQL.

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 ).

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.

TheMonadReader soll eine regelmäßige Veröffentlichung rund um Haskell werden. Verlinkt ist die erste Ausgabe. Das ganze soll weniger formell als klassische wissenschaftliche Journale sein, könnte also durchaus interessant werden. Über Pugs (Perl6 in Haskell) ist auch ein Artikel in der ersten Ausgabe drin.

Pugs - pugscode ist eine Perl6 Implementierung in Haskell. Noch verrückter: das ganze Projekt wird primär in einem IRC-Chat koordiniert und die gemeinsame Arbeit wird mit SubEthaEdit gemacht. Ist das schon Nirvana?

darcs - Distributed Versioning

darcs ist eines der vielen Versionsverwaltungssysteme die als Nachfolger von CVS antreten. Speziell gehört darcs in die Klasse der verteilten Versionsverwaltungen und ist damit natürlich Subversion mit seinem zentralistischen Ansatz überlegen (jedenfalls wenn man ein verteiltes Projekt verwalten will und nicht einfach mit dem zentralen Repository klar kommen kann). Normalerweise würde ich über sowas nicht viele Worte verlieren - schliesslich gibts im Moment mehr Versionsverwaltungsprojekte als in den 80ern Editoren. Aber jetzt mal ernsthaft: wer kann ein Versionsverwaltungssystem ignorieren das in einer funktionalen Programmiersprache mit lazy evaluation geschrieben ist (ja, genau, das Teil ist in Haskell - soviel dazu das Haskell für praktische Projekte untauglich sei) und sich selber als auf einer "theory of patches" with roots in quantum mechanics basierend beschreibt? Und die Programmierer benutzen auch noch literate Programming - ja, diese etwas in Vergessenheit geratene Methode von Knuth in einem Source sowohl Dokumentation als auch Code unterzubringen und ein Programm dokumentationszentrisch zu entwickeln. Einfach nur cool.

The Implementation of Functional Programming Languages

Klasse. Ein Klassiker der Informatikliteratur (ok, ein moderner Klassiker ) ist jetzt online lesbar. Das Buch ist deshalb interessant, weil es viele Aspekte der Realisierung einer für Haskell oder Miranda geeigneten Systemumgebung erläutert.

Es ist allerdings leider nur als Scans im JPG-Format online, also etwas mühsam zu benutzen - vor allem Suchen klappt natürlich nicht. Aber immerhin ist das Inhaltsverzeichnis mittels Imagemap verlinkt.

Hier gibts den Originalartikel.

hOp - Haskell Micro-Kernel

Device-Treiber in Haskell programmieren? Cool

Bei Lambda the Ultimate fand ich den den Originalartikel.

Hugs 98 - Haskell Interpreter Implementation für viele Systeme (sogar Zaurus)