Comprehending Queries

Mit dem Haskell 98 Report kam im Dezember 2002 ein langwieriger Standardisierungsprozess für die funktionale Programmiersprache Haskell endlich zu einem positiven Ende. Das waren eigentlich good news for everyone, aber ich erinnere mich, dass ich damals grummelte: eines der aus meiner Sicht zentralen Features der Sprache, die Monad Comprehensions, war im Laufe des Prozesses aus dem Haskell-Sprachstandard entfernt worden. Vor allem dem Datenbanker in mir tat das weh: ausdrucksstarke Comprehensions sind nämlich eine ganz hervorragende Repräsentation für Datenbankanfragen. Vor dem Haskell 98 Report war Haskell mein Prototyping-Werkzeug für die Formulierung, Transformation und Optimierung von Queries gewesen — und jetzt?

Weiterlesen...

Erste Schritte in ClojureScript

Funktionale Programmierer möchten auch in der Web-Entwicklung auf dem Browser ihre bevorzugte funktionale Sprache nutzen. Zwar hat JavaScript Wurzeln in der funktionalen Programmiererung, aber die Sprache hat eben auch noch eine objektorientierte und verschiedene hässliche Seiten. Aus diesem Grund gibt es inzwischen eine kleine Industrie von Compilern von anderen Programmiersprachen nach JavaScript, zum Beispiel für OCaml, Scala, Haskell und Racket.

Heute beschäftigen wir uns mit einer besonders populären funktionalen Sprache mit JavaScript als Ziel: ClojureScript.

Weiterlesen...

Testen mit Haskell

Tests sind für gute Softwarequalität unerlässlich. Obwohl wir hier in diesem Blog immer wieder über die Vorzüge funktionaler Programmierung in Bezug auf Softwarequalität und geringe Fehlerraten berichten, gilt dies natürlich auch für mit funktionalen Sprachen realisierte Projekte. Um Softwaretests zu schreiben stehen den Entwicklern und Testern in funktionalen Sprachen dieselben Mittel wie z.B. in objekt-orientierten Sprachen zur Verfügung. Allerdings gestaltet sich das Testen in funktionalen Sprachen oftmals deutlich einfacher, da Zustand explizit gehandhabt wird (siehe auch folgende Blogartikel: 1, 2, 3), wodurch Fehler leichter zu reproduzieren sind und aufwändiges Initialisieren von zu testenden Objekte oft entfällt.

In diesem Artikel möchte ich ein Framework vorstellen, mit dem wir bei uns in der Firma sämtliche Tests auf Codeebene für unsere Haskell-Software organisieren. Das Framework integriert dabei verschiedene Testmethoden (Unit-Tests, randomisierte Tests mit QuickCheck, auch diskutiert in diesem Blogartikel), ermöglicht schnelles Hinzufügen von neuen Testfällen und bereite Fehlermeldung so auf, dass die Ursache eines Fehlers einfach lokalisierbar ist. Das Framework steht unter einer Open-Source-Lizenz.

Weiterlesen...