Haskell-Tutorial: Haskell lernen leicht gemacht

Unter den funktionalen Programmiersprachen nimmt Haskell eine besondere Rolle ein: Seit der Definition der ersten Version im Jahr 1990 zählt Haskell nämlich als Quasi-Standard für eine Sprache, die dem funktionalen Programmierparadigma folgt. Nicht von ungefähr orientieren sich viele andere funktionale Sprachen an Haskell. Das Lernen der Programmiersprache kann zu Beginn zwar schnell zu frustrierenden Erfahrungen führen – insbesondere, da die Konzepte der funktionalen Programmierung für unerfahrene Nutzer sehr gewöhnungsbedürftig sind. Sobald jedoch die ersten Einstiegshürden überwunden sind, können auch Neueinsteiger erfolgreich in die Welten der Haskell-Programmierung eintauchen.

Im nachfolgenden Haskell-Tutorial stellen wir Ihnen für einen möglichst einfachen Einstieg Schritt für Schritt vor, wie Sie die funktionale Sprache installieren und wie das Programmieren mit Haskell genau funktioniert.

Haskell installieren und starten: So funktioniert’s

Wie bei vielen anderen Programmiersprachen auch, haben Sie verschiedene Möglichkeiten, um Ihr System für die Arbeit mit Haskell vorzubereiten. Die gängigste Lösung für alle, die Haskell lernen bzw. bequem mit der Sprache programmieren möchten, ist GHCi. Dabei handelt es sich um eine einsatzfertige, interaktive Entwicklungsumgebung, die im Paket mit dem Glasgow Haskell Compiler verfügbar ist. Zusätzlich zu dem Compiler sind die Haskell-Bibliotheken vorausgesetzt, für die Sie wiederum eine Building-Software wie Cabal oder Stack benötigen.

Hinweis

Das Gesamtkonstrukt aus Haskell-Compiler und passender Building-Anwendung wird auch als Haskell-Plattform bezeichnet.

Für einen möglichst einfachen Einstieg installieren Sie eine komplette Haskell-Plattform. Einsatzfertige Installationsdateien für Windows, macOS und verschiedenste Linux-Distributionen zum kostenfreien Download (inklusive Installationsanleitung) finden Sie z. B. auf der offiziellen Website des Haskell-Projekts.

In den Linux-Systemen können Sie auch den Installationsweg über den Paketmanager wählen. Als Ubuntu- oder Debian-Nutzer tippen Sie hierfür beispielsweise folgenden Befehl in das Terminal ein:

sudo apt-get install haskell-platform

Nach abgeschlossener Installation sollten Sie die interaktive Entwicklungsumgebung jederzeit mit dem Befehl „ghci“ über die jeweilige Kommandozeile Ihres Systems starten können – in Windows beispielsweise via PowerShell, die auch für die Installation empfohlen wird.

Hinweis

Beachten Sie, dass die Haskell-Plattform-Versionen in den Paketverwaltungen nicht immer auf dem aktuellen Stand sind. Unter Umständen ist also noch eine Aktualisierung der Installationsdateien erforderlich!

Haskell lernen: Die grundlegenden Datentypen verstehen

Haskell ist eine rein funktionale Sprache, was sie wesentlich interaktiver und intelligenter als andere Programmiersprachen macht. Datentypen wie Zahlen, Zeichen oder logische Werte (Boolean) sind in Haskell bereits vordefiniert oder werden zumindest intelligent vom Computerspeicher aufgeschlüsselt.

Zahlen in Haskell

Haskell versteht also beispielsweise natürliche Zahlen als natürliche Zahlen. Konkret heißt das: Sie müssen im Haskell-Code nicht definieren, dass es sich bei einer Eingabe um eine Zahl handelt. Ist die Entwicklungsumgebung gestartet, können Sie also einfach Rechnungen mit den gewohnten Operatoren wie Plus (+) oder Minus (-) durchführen. Tippen Sie exemplarisch „2+2“ ein und bestätigen Sie die Eingabe per Eingabetaste:

Prelude> 2+2

Haskell präsentiert daraufhin das Ergebnis dieser mathematischen Rechnung: 4.

Buchstaben in Haskell

Auch Buchstaben kann Haskell intelligent erfassen, was wir an dieser Stelle im Haskell-Tutorial ganz einfach an einem Beispiel demonstrieren können: Zunächst setzen wir im Kommando die Option „:t“. Dies sorgt dafür, dass die Kommandozeile nach dem Bestätigen des Befehls ausgibt, um welchen Datentyp es sich handelt. Nach einem nachfolgenden Leerzeichen fügen Sie einen beliebigen Buchstaben in einfachen oder doppelten Anführungszeichen ein und senden den Input mit Enter ab:

Prelude>:t "a"

Das Ausgabeergebnis lautet in diesem Fall korrekterweise „[Char]“, was für das englische Wort „character“ steht – zu Deutsch: Buchstabe.

Zeichenketten in Haskell

Zeichenketten, die in Programmiersprachen besser unter dem englischen Begriff „Strings“ bekannt sind, kann Haskell ebenfalls ohne Probleme als solche erkennen. Auch in diesem Fall benötigen Sie keine spezifische Syntax – es reicht, wenn Sie die jeweilige Zeichenfolge in doppelte Anführungszeichen setzen. Ein Beispiel liefert folgende Eingabe, die aus Zahlen und Buchstaben besteht:

Prelude>:t "12345abcde"

Indem wir auch an dieser Stelle wieder die Option „:t“ setzen, verrät uns Haskell erneut im Output, um welchen Datentyp es sich handelt. Wie bei einem einzelnen Buchstaben zeigt die Kommandozeile „[Char]“ an.

Haskell lernen: Vorstellung der wichtigsten Operatoren

Im Abschnitt über Zahlen haben wir bereits herausgestellt, dass Sie die typischen mathematischen Operatoren – Addition, Subtraktion, Division und Multiplikation – in Haskell ohne größere Umstände einsetzen können. Mit dem Sequenz- oder Bereichsoperator steht zudem ein Operator für die einfache Auflistung von aufeinanderfolgenden Werten zur Verfügung.

Hinweis

Für die Ausführung und Ergebnisdarstellung der nachfolgenden Code-Snippets dieses Haskell-Tutorials wurde die Web-Entwicklungsumgebung Online Haskell Compiler verwendet.

Addition in Haskell

Der Additionsoperator für das Zusammenrechnen von zwei oder mehr Werten wird auch in Haskell klassisch durch das Pluszeichen (+) wiedergegeben. Im nachfolgenden Codebeispiel, das wir in die Datei main.hs einfügen, binden wir mithilfe des Ausdrucks „let“ zwei Variablen („var1“ und „var2“) ein, die addiert werden sollen. Die Kommandozeile soll anschließend das Ergebnis in Form einer Textnachricht präsentieren, die in dem Ausdruck „putStrLn“ definiert wird:

main = do 
let var1 = 2 
let var2 = 3 
putStrLn "Die beiden Zahlen ergeben zusammengerechnet:" 
print(var1 + var2)

Im oben genannten Onlinetool sehen Input (linkes Fenster) und Output (rechtes Fenster) folgendermaßen aus:

Subtraktion in Haskell

Wollen Sie Haskell anweisen, einen Zahlenwert von einem anderen abzuziehen, nutzen Sie den klassischen Subtraktionsoperator – ausgedrückt durch das Minuszeichen (-). Im vorangegangenen Haskell-Tutorial-Beispiel für die Addition ersetzen wir einfach den Operator und passen die Output-Nachricht leicht an:

main = do 
let var1 = 2 
let var2 = 3 
putStrLn "Das Subtraktionsergebnis der beiden Zahlen ist:" 
print(var1 - var2)
Hinweis

Auch für die Operatoren der Division und Multiplikation greift Haskell auf die typischen Zeichen zurück: Mit Slash bzw. Schrägstrich (/) können Sie Werte dividieren, mit dem Sternchen-Zeichen (*) weisen Sie Haskell an, Werte zu multiplizieren.

Auflistungen von Werten in Haskell

Der „Sequenz“-Operator ist ein spezieller Operator von Haskell. Er ermöglicht es Ihnen, auf einfachste Weise eine Auflistung mit einer Sequenz von Werten zu deklarieren. Gekennzeichnet wird er durch „[..]“. Möchten Sie also beispielsweise, dass Haskell alle Zahlen von 1 bis 10 anzeigt, können Sie für dieses Zahlenspektrum den Input „[1..10]“ angeben. Gleiches gilt für Buchstaben – mit „[a..z]“ beispielsweise lässt Sie sich im Haskell-Code das Alphabet präsentieren. Auch für den „Sequenz“-Operator haben wir an dieser Stelle ein einfaches Beispiel:

main :: IO()
main = do
print [1..10]

Haskell: So deklarieren und definieren Sie Funktionen

Haskell ist eine rein funktionale Sprache. Dass Funktionen daher bei der Haskell-Programmierung eine wichtige Rolle spielen, ist also keine große Überraschung. Haskell verfolgt dabei, wie andere Sprachen auch, seinen eigenen Weg, um Funktionen zu deklarieren und zu definieren.

Hinweis

Die Deklaration einer Funktion verrät dem Compiler, dass eine bestimmte Funktion existiert. Zudem gibt sie an, welche Parameter zu erwarten sind und wie der Output auszusehen hat. Als Definition einer Funktion bezeichnet man das tatsächliche Einbinden der Funktion im Code.

Um Ihnen das Funktionsprinzip von Haskell in diesem Tutorial näher zu bringen, schauen wir erneut auf ein konkretes Codebeispiel:

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

In der ersten Codezeile wird die Funktion deklariert – alle drei Werte der Funktion (Input und Output) sind ganze Zahlen (Integer). In Zeile 2 wird die Funktion definiert: Die zwei Argumente „x“ und „y“ werden addiert. Mit der bereits bekannten „main“-Methode wird der Code kompiliert und das Ergebnis der Funktion für die beiden Eingabewerte „3“ und „5“ ausgegeben.

Einen tieferen Einblick in die Arbeit mit Funktionen in Haskell liefert folgendes YouTube-Tutorial für Anfänger:

Zur Anzeige dieses Videos sind Cookies von Drittanbietern erforderlich. Ihre Cookie-Einstellungen können Sie hier aufrufen und ändern.

Weiterführende Tipps zum Haskell-Lernen und -Programmieren

Haskell ist eine sehr populäre Sprache, weshalb das Hilfsangebot in Form von Onlinemanuals, Tutorials und Supportforen sehr groß ist. Zu empfehlen ist beispielsweise die YouTube-Tutorial-Reihe „Haskell for Imperative Programmers“ von Philipp Hagenlocher, die die wichtigsten Komponenten der funktionalen Sprache in über 30 Videos mit verschiedenen Themenschwerpunkten zusammenfasst. Einen umfangreichen Überblick über weitere Hilfsangebote im Web liefert der Community-Bereich der offiziellen Haskell-Homepage. Freunde gedruckter Literatur kommen u. a. in dem Buch „Haskell from the very beginning“ von John Whitington auf ihre Kosten.

Wenn Sie die interaktive Entwicklungsumgebung ghci nutzen, können Sie sich beim Lernen von Haskell im Übrigen auch jederzeit eine vollständige Übersicht der verfügbaren Kommandos anzeigen lassen. Tippen Sie hierfür einfach folgenden Befehl in die Kommandozeile ein und bestätigen Sie die Eingabe mit der Eingabetaste:

Prelude>:?