Haskell: Die funktionale Programmiersprache im Portrait

Seit jeher existieren in der Software-Entwicklung verschiedenartige Herangehensweisen: Programmierparadigmen bestimmen etwa die Art, wie Programme geschrieben bzw. Programmcodes strukturiert werden. Zu den beliebtesten Ansätzen zählt dabei die funktionale Programmierung. Diese ist ihrerseits eine Unterform des deklarativen Ansatzes, bei dem ausschließlich Ergebnisse und nicht die Schritte, die zu diesen führen, beschrieben werden. Ein etablierter Vertreter dieser Kategorie ist die Programmiersprache Haskell, die nach dem US-amerikanischen Mathematiker Haskell Brooks Curry benannt wurde.

Im Folgenden erfahren Sie, was hinter Haskell steckt, wie sich die Sprache von anderen Programmiersprachen unterscheidet und für welche Projekte sie am besten geeignet ist.

Was ist Haskell?

Haskell ist eine rein funktionale Programmiersprache, deren erste Version im Jahr 1990 veröffentlicht wurde. Namensgeber war der Mathematiker Haskell Brooks Curry, der mit seinen Arbeiten zur kombinatorischen Logik (zwischen 1920 und 1960) den Grundstein für funktionale Programmiersprachen legte. Haskell basiert auf dem Lambda-Kalkül (formale Sprache zur Untersuchung von Funktionen), weshalb der griechische Buchstabe Lambda auch das offizielle Logo der Sprache ziert.

Programme, die in Haskell geschrieben sind, werden immer als mathematische Funktionen dargestellt, wobei diese Funktionen niemals Seiten- bzw. Nebeneffekte haben. Jede verwendete Funktion liefert bei gleicher Eingabe also immer das gleiche Ergebnis und ändert niemals den Zustand eines Programms. Der Wert eines Ausdrucks bzw. das Ergebnis einer Funktion hängt daher ausschließlich von den aktuellen Eingabeparametern ab. Imperative Sprachkonstruktionen für die Programmierung einer Abfolge von Anweisungen gibt es in Haskell nicht.

Mit der Veröffentlichung wurde Haskell zu einer Art Standard für funktionale Programmiersprachen. In der Folge wurden zahlreiche Derivate wie Parallel Haskell, Eager Haskell, Haskell++ oder Eden entwickelt, die sich eng an Haskell orientieren. Auch einige gänzlich neue Programmiersprachen haben sich an Haskell orientiert. Die universelle Sprache Python, die zu den wichtigsten modernen Internet-Programmiersprachen zählt, hat beispielsweise die Lambda-Notation und die Haskell-Listenverarbeitungssyntax übernommen.

Was kann man mit Haskell als Programmiersprache machen?

Es kostet eine Menge Arbeit, Zeit und Geld, große Software-Projekte zu entwickeln und zu pflegen. Funktionale Programmiersprachen wie Haskell können hierbei für Entlastung sorgen. Dabei weiß Haskell insbesondere mit folgenden Vorzügen zu überzeugen:

  • Die Produktivität der Entwickler lässt sich signifikant steigern.
  • Der Code von Haskell-Software ist kurz, übersichtlich und leicht zu warten.
  • Haskell-Anwendungen sind weniger fehleranfällig und bieten eine hohe Zuverlässigkeit.
  • Die „semantische“ Lücke zwischen Programmierer und der Sprache ist minimal.

Haskell ist somit als Programmiersprache für ein großes Spektrum an Anwendungen geeignet. Insbesondere für Programme, die ein hohes Maß an Modifizierbarkeit und Wartungsfreundlichkeit bieten sollen, ist die funktionale Sprache prädestiniert. Auch bei der Ausarbeitung von Spezifikationen bzw. Prototypen, die tatsächlich ausgeführt und somit getestet und debuggt werden können, kommen die Stärken von Haskell zum Tragen.

Vor allem in Branchen, in denen die genaue Abbildung mathematischer Algorithmen erforderlich ist, fällt die Wahl der Programmiersprache nicht selten auf Haskell. Typische Beispiele sind Anwendungen zur Netzwerksicherheit, Spezifikations-Frameworks für eingebettete Systeme oder Programme zur Modellierung komplexer mathematischer Berechnungen.

Hinweis

Für die Programmierung einfacher Programme stellt Haskell keine geeignete Wahl dar.

Wie unterscheidet sich Haskell von anderen Programmiersprachen?

Als rein funktionale Programmiersprache hebt sich Haskell von vielen anderen Sprachen ab. Insbesondere die Unterschiede zu Sprachen, die sich am imperativen Programmierparadigma orientieren, sind signifikant: Programme, die in imperativen Sprachen geschrieben sind, führen Folgen von Anweisungen aus. Noch während der Ausführung kann sich der Status dieser Anweisungen ändern, beispielsweise indem Variablen geändert werden. Kontrollflussstrukturen sorgen dabei dafür, dass sich Anweisungen mehrfach ausführen lassen.

Beim funktionalen Ansatz, der Haskell zugrunde liegt, gibt die Software dem Computer keine direkten Befehle, wie er etwas machen soll. Stattdessen wird das Problem bzw. dessen Lösung beschrieben. Variablen sind undynamisch: Eine Variable mit dem Wert „1“ hat in Haskell und anderen funktionalen Sprachen dauerhaft den Wert „1“ und kann nicht einfach so abgeändert werden. Funktionen erfüllen lediglich den Zweck, etwas zu berechnen und das entsprechende Ergebnis zurückzugeben.

Haskell lernen: Voraussetzungen, Tipps und ein erstes Beispiel

Haskell zu lernen, kann sich gleich aus mehreren Gründen auszahlen: Zum einen können Sie in der Folge eigene Software-Lösungen in Haskell programmieren, sofern sich die Sprache als Basis eignet. Zum anderen sind Sie bestens vorbereitet, wenn Sie sich mit fremden Anwendungen auseinandersetzen müssen, die in Haskell geschrieben sind. Da Haskell außerdem eine Art Standard für funktionale Programmiersprachen darstellt, lohnt sich das Erlernen auch, wenn Sie allgemeines Know-how in puncto funktionaler Programmierung aufbauen möchten.

Wie bei vielen anderen Sprachen haben Sie zwei Möglichkeiten, Haskell-Code zu verarbeiten: stapelweise mit einem Compiler oder interaktiv mit einem Interpreter. Ein interaktives System bietet den Vorteil, eine passende Kommandozeile mitzuliefern, in der Sie direkt experimentieren und Ausdrücke auswerten können. Für einen einfachen Einstieg in die Programmiersprache Haskell ist es also in jedem Fall zu präferieren. Zu den bekanntesten Vertretern zählt der mittlerweile nicht mehr aktiv weiterentwickelte Interpreter Hugs. Alternativ liefert GHC (Glasgow Haskell Compiler) das praktische Komplettpaket aus Haskell-Interpreter und -Compiler.

Tipp

Wie sich die Arbeits- und Funktionsweise von Interpretern und Compilern genau unterscheidet, verrät unser Artikel „Compiler vs. Interpreter – Definition und Unterschiede“.

Ein einfaches Beispiel für die Arbeitsweise von Haskell liefert folgendes Code-Snippet:

add :: Integer -> Integer -> Integer   --function declaration
add x y =  x + y                       --function definition
main = do 
   putStrLn "Die Summe der beiden Zahlen ist:"
   print(add 2 5)    --calling a function 

In Codezeile 1 wird die Haskell-Funktion deklariert, die Integer (ganze Zahlen) als Eingabe- und Ausgabewerte haben soll. In Zeile 2 ist die Funktion konkret definiert: Zwei Argumente werden addiert, das Additionsergebnis soll präsentiert werden. Als Input werden die beiden Werte „2“ und „5“ geliefert. Die Ausführung dieses Snippets führt zu folgender Ausgabe:

Die Summe der beiden Zahlen ist: 7
Tipp

Weiterführende Tipps und Tricks für den Einstieg in die Syntax und Funktionsweise von Haskell erhalten Sie in unserem umfangreichen Haskell-Tutorial.