Unter den funk­tio­na­len Pro­gram­mier­spra­chen nimmt Haskell eine besondere Rolle ein: Seit der De­fi­ni­ti­on der ersten Version im Jahr 1990 zählt Haskell nämlich als Quasi-Standard für eine Sprache, die dem funk­tio­na­len Pro­gram­mier­pa­ra­dig­ma folgt. Nicht von ungefähr ori­en­tie­ren sich viele andere funk­tio­na­le Sprachen an Haskell. Das Lernen der Pro­gram­mier­spra­che kann zu Beginn zwar schnell zu frus­trie­ren­den Er­fah­run­gen führen – ins­be­son­de­re, da die Konzepte der funk­tio­na­len Pro­gram­mie­rung für un­er­fah­re­ne Nutzer sehr ge­wöh­nungs­be­dürf­tig sind. Sobald jedoch die ersten Ein­stiegs­hür­den über­wun­den sind, können auch Neu­ein­stei­ger er­folg­reich in die Welten der Haskell-Pro­gram­mie­rung ein­tau­chen.

Im nach­fol­gen­den Haskell-Tutorial stellen wir Ihnen für einen möglichst einfachen Einstieg Schritt für Schritt vor, wie Sie die funk­tio­na­le Sprache in­stal­lie­ren und wie das Pro­gram­mie­ren mit Haskell genau funk­tio­niert.

Haskell in­stal­lie­ren und starten: So funk­tio­niert’s

Wie bei vielen anderen Pro­gram­mier­spra­chen auch, haben Sie ver­schie­de­ne Mög­lich­kei­ten, um Ihr System für die Arbeit mit Haskell vor­zu­be­rei­ten. Die gängigste Lösung für alle, die Haskell lernen bzw. bequem mit der Sprache pro­gram­mie­ren möchten, ist GHCi. Dabei handelt es sich um eine ein­satz­fer­ti­ge, in­ter­ak­ti­ve Ent­wick­lungs­um­ge­bung, die im Paket mit dem Glasgow Haskell Compiler verfügbar ist. Zu­sätz­lich zu dem Compiler sind die Haskell-Bi­blio­the­ken vor­aus­ge­setzt, für die Sie wiederum eine Building-Software wie Cabal oder Stack benötigen.

Hinweis
Das Ge­samt­kon­strukt aus Haskell-Compiler und passender Building-Anwendung wird auch als Haskell-Plattform be­zeich­net.

Für einen möglichst einfachen Einstieg in­stal­lie­ren Sie eine komplette Haskell-Plattform. Ein­satz­fer­ti­ge In­stal­la­ti­ons­da­tei­en für Windows, macOS und ver­schie­dens­te Linux-Dis­tri­bu­tio­nen zum kos­ten­frei­en Download (inklusive In­stal­la­ti­ons­an­lei­tung) finden Sie z. B. auf der of­fi­zi­el­len Website des Haskell-Projekts.

In den Linux-Systemen können Sie auch den In­stal­la­ti­ons­weg über den Pa­ket­ma­na­ger wählen. Als Ubuntu- oder Debian-Nutzer tippen Sie hierfür bei­spiels­wei­se folgenden Befehl in das Terminal ein:

sudo apt-get install haskell-platform

Nach ab­ge­schlos­se­ner In­stal­la­ti­on sollten Sie die in­ter­ak­ti­ve Ent­wick­lungs­um­ge­bung jederzeit mit dem Befehl „ghci“ über die jeweilige Kom­man­do­zei­le Ihres Systems starten können – in Windows bei­spiels­wei­se via Power­Shell, die auch für die In­stal­la­ti­on empfohlen wird.

Hinweis
Beachten Sie, dass die Haskell-Plattform-Versionen in den Pa­ket­ver­wal­tun­gen nicht immer auf dem aktuellen Stand sind. Unter Umständen ist also noch eine Ak­tua­li­sie­rung der In­stal­la­ti­ons­da­tei­en er­for­der­lich!

Haskell lernen: Die grund­le­gen­den Da­ten­ty­pen verstehen

Haskell ist eine rein funk­tio­na­le Sprache, was sie we­sent­lich in­ter­ak­ti­ver und in­tel­li­gen­ter als andere Pro­gram­mier­spra­chen macht. Da­ten­ty­pen wie Zahlen, Zeichen oder logische Werte (Boolean) sind in Haskell bereits vor­de­fi­niert oder werden zumindest in­tel­li­gent vom Com­pu­ter­spei­cher auf­ge­schlüs­selt.

Zahlen in Haskell

Haskell versteht also bei­spiels­wei­se na­tür­li­che Zahlen als na­tür­li­che Zahlen. Konkret heißt das: Sie müssen im Haskell-Code nicht de­fi­nie­ren, dass es sich bei einer Eingabe um eine Zahl handelt. Ist die Ent­wick­lungs­um­ge­bung gestartet, können Sie also einfach Rech­nun­gen mit den gewohnten Ope­ra­to­ren wie Plus (+) oder Minus (-) durch­füh­ren. Tippen Sie ex­em­pla­risch „2+2“ ein und be­stä­ti­gen Sie die Eingabe per Ein­ga­be­tas­te:

Prelude> 2+2

Haskell prä­sen­tiert daraufhin das Ergebnis dieser ma­the­ma­ti­schen Rechnung: 4.

Buch­sta­ben in Haskell

Auch Buch­sta­ben kann Haskell in­tel­li­gent erfassen, was wir an dieser Stelle im Haskell-Tutorial ganz einfach an einem Beispiel de­mons­trie­ren können: Zunächst setzen wir im Kommando die Option „:t“. Dies sorgt dafür, dass die Kom­man­do­zei­le nach dem Be­stä­ti­gen des Befehls ausgibt, um welchen Datentyp es sich handelt. Nach einem nach­fol­gen­den Leer­zei­chen fügen Sie einen be­lie­bi­gen Buch­sta­ben in einfachen oder doppelten An­füh­rungs­zei­chen ein und senden den Input mit Enter ab:

Prelude>:t "a"

Das Aus­ga­be­er­geb­nis lautet in diesem Fall kor­rek­ter­wei­se „[Char]“, was für das englische Wort „character“ steht – zu Deutsch: Buchstabe.

Zei­chen­ket­ten in Haskell

Zei­chen­ket­ten, die in Pro­gram­mier­spra­chen besser unter dem eng­li­schen Begriff „Strings“ bekannt sind, kann Haskell ebenfalls ohne Probleme als solche erkennen. Auch in diesem Fall benötigen Sie keine spe­zi­fi­sche Syntax – es reicht, wenn Sie die jeweilige Zei­chen­fol­ge in doppelte An­füh­rungs­zei­chen setzen. Ein Beispiel liefert folgende Eingabe, die aus Zahlen und Buch­sta­ben 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 Buch­sta­ben zeigt die Kom­man­do­zei­le „[Char]“ an.

Haskell lernen: Vor­stel­lung der wich­tigs­ten Ope­ra­to­ren

Im Abschnitt über Zahlen haben wir bereits her­aus­ge­stellt, dass Sie die typischen ma­the­ma­ti­schen Ope­ra­to­ren – Addition, Sub­trak­ti­on, Division und Mul­ti­pli­ka­ti­on – in Haskell ohne größere Umstände einsetzen können. Mit dem Sequenz- oder Be­reichs­ope­ra­tor steht zudem ein Operator für die einfache Auf­lis­tung von auf­ein­an­der­fol­gen­den Werten zur Verfügung.

Hinweis
Für die Aus­füh­rung und Er­geb­nis­dar­stel­lung der nach­fol­gen­den Code-Snippets dieses Haskell-Tutorials wurde die Web-Ent­wick­lungs­um­ge­bung Online Haskell Compiler verwendet.

Addition in Haskell

Der Ad­di­ti­ons­ope­ra­tor für das Zu­sam­men­rech­nen von zwei oder mehr Werten wird auch in Haskell klassisch durch das Plus­zei­chen (+) wie­der­ge­ge­ben. Im nach­fol­gen­den Code­bei­spiel, 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 Kom­man­do­zei­le soll an­schlie­ßend das Ergebnis in Form einer Text­nach­richt prä­sen­tie­ren, 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 On­line­tool sehen Input (linkes Fenster) und Output (rechtes Fenster) fol­gen­der­ma­ßen aus:

Sub­trak­ti­on in Haskell

Wollen Sie Haskell anweisen, einen Zah­len­wert von einem anderen ab­zu­zie­hen, nutzen Sie den klas­si­schen Sub­trak­ti­ons­ope­ra­tor – aus­ge­drückt durch das Mi­nus­zei­chen (-). Im vor­an­ge­gan­ge­nen 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 Ope­ra­to­ren der Division und Mul­ti­pli­ka­ti­on greift Haskell auf die typischen Zeichen zurück: Mit Slash bzw. Schräg­strich (/) können Sie Werte di­vi­die­ren, mit dem Sternchen-Zeichen (*) weisen Sie Haskell an, Werte zu mul­ti­pli­zie­ren.

Auf­lis­tun­gen von Werten in Haskell

Der „Sequenz“-Operator ist ein spe­zi­el­ler Operator von Haskell. Er er­mög­licht es Ihnen, auf ein­fachs­te Weise eine Auf­lis­tung mit einer Sequenz von Werten zu de­kla­rie­ren. Ge­kenn­zeich­net wird er durch „[..]“. Möchten Sie also bei­spiels­wei­se, dass Haskell alle Zahlen von 1 bis 10 anzeigt, können Sie für dieses Zah­len­spek­trum den Input „[1..10]“ angeben. Gleiches gilt für Buch­sta­ben – mit „[a..z]“ bei­spiels­wei­se lässt Sie sich im Haskell-Code das Alphabet prä­sen­tie­ren. Auch für den „Sequenz“-Operator haben wir an dieser Stelle ein einfaches Beispiel:

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

Haskell: So de­kla­rie­ren und de­fi­nie­ren Sie Funk­tio­nen

Haskell ist eine rein funk­tio­na­le Sprache. Dass Funk­tio­nen daher bei der Haskell-Pro­gram­mie­rung eine wichtige Rolle spielen, ist also keine große Über­ra­schung. Haskell verfolgt dabei, wie andere Sprachen auch, seinen eigenen Weg, um Funk­tio­nen zu de­kla­rie­ren und zu de­fi­nie­ren.

Hinweis
Die De­kla­ra­ti­on einer Funktion verrät dem Compiler, dass eine bestimmte Funktion existiert. Zudem gibt sie an, welche Parameter zu erwarten sind und wie der Output aus­zu­se­hen hat. Als De­fi­ni­ti­on einer Funktion be­zeich­net man das tat­säch­li­che Einbinden der Funktion im Code.

Um Ihnen das Funk­ti­ons­prin­zip von Haskell in diesem Tutorial näher zu bringen, schauen wir erneut auf ein konkretes Code­bei­spiel:

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 de­kla­riert – 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 kom­pi­liert und das Ergebnis der Funktion für die beiden Ein­ga­be­wer­te „3“ und „5“ aus­ge­ge­ben.

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

Wei­ter­füh­ren­de Tipps zum Haskell-Lernen und -Pro­gram­mie­ren

Haskell ist eine sehr populäre Sprache, weshalb das Hilfs­an­ge­bot in Form von On­line­ma­nu­als, Tutorials und Sup­port­fo­ren sehr groß ist. Zu empfehlen ist bei­spiels­wei­se die YouTube-Tutorial-Reihe „Haskell for Im­pe­ra­ti­ve Pro­gramm­ers“ von Philipp Ha­gen­lo­cher, die die wich­tigs­ten Kom­po­nen­ten der funk­tio­na­len Sprache in über 30 Videos mit ver­schie­de­nen The­men­schwer­punk­ten zu­sam­men­fasst. Einen um­fang­rei­chen Überblick über weitere Hilfs­an­ge­bo­te im Web liefert der Community-Bereich der of­fi­zi­el­len Haskell-Homepage. Freunde ge­druck­ter Literatur kommen u. a. in dem Buch „Haskell from the very beginning“ von John Whitin­g­ton auf ihre Kosten.

Wenn Sie die in­ter­ak­ti­ve Ent­wick­lungs­um­ge­bung ghci nutzen, können Sie sich beim Lernen von Haskell im Übrigen auch jederzeit eine voll­stän­di­ge Übersicht der ver­füg­ba­ren Kommandos anzeigen lassen. Tippen Sie hierfür einfach folgenden Befehl in die Kom­man­do­zei­le ein und be­stä­ti­gen Sie die Eingabe mit der Ein­ga­be­tas­te:

Prelude>:?
Zum Hauptmenü