Seit jeher exis­tie­ren in der Software-Ent­wick­lung ver­schie­den­ar­ti­ge Her­an­ge­hens­wei­sen: Pro­gram­mier­pa­ra­dig­men bestimmen etwa die Art, wie Programme ge­schrie­ben bzw. Pro­gramm­codes struk­tu­riert werden. Zu den be­lieb­tes­ten Ansätzen zählt dabei die funk­tio­na­le Pro­gram­mie­rung. Diese ist ih­rer­seits eine Unterform des de­kla­ra­ti­ven Ansatzes, bei dem aus­schließ­lich Er­geb­nis­se und nicht die Schritte, die zu diesen führen, be­schrie­ben werden. Ein eta­blier­ter Vertreter dieser Kategorie ist die Pro­gram­mier­spra­che Haskell, die nach dem US-ame­ri­ka­ni­schen Ma­the­ma­ti­ker Haskell Brooks Curry benannt wurde.

Im Folgenden erfahren Sie, was hinter Haskell steckt, wie sich die Sprache von anderen Pro­gram­mier­spra­chen un­ter­schei­det und für welche Projekte sie am besten geeignet ist.

Was ist Haskell?

Haskell ist eine rein funk­tio­na­le Pro­gram­mier­spra­che, deren erste Version im Jahr 1990 ver­öf­fent­licht wurde. Na­mens­ge­ber war der Ma­the­ma­ti­ker Haskell Brooks Curry, der mit seinen Arbeiten zur kom­bi­na­to­ri­schen Logik (zwischen 1920 und 1960) den Grund­stein für funk­tio­na­le Pro­gram­mier­spra­chen legte. Haskell basiert auf dem Lambda-Kalkül (formale Sprache zur Un­ter­su­chung von Funk­tio­nen), weshalb der grie­chi­sche Buchstabe Lambda auch das of­fi­zi­el­le Logo der Sprache ziert.

Programme, die in Haskell ge­schrie­ben sind, werden immer als ma­the­ma­ti­sche Funk­tio­nen dar­ge­stellt, wobei diese Funk­tio­nen niemals Seiten- bzw. Ne­ben­ef­fek­te haben. Jede ver­wen­de­te 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 aus­schließ­lich von den aktuellen Ein­ga­be­pa­ra­me­tern ab. Im­pe­ra­ti­ve Sprach­kon­struk­tio­nen für die Pro­gram­mie­rung einer Abfolge von An­wei­sun­gen gibt es in Haskell nicht.

Mit der Ver­öf­fent­li­chung wurde Haskell zu einer Art Standard für funk­tio­na­le Pro­gram­mier­spra­chen. In der Folge wurden zahl­rei­che Derivate wie Parallel Haskell, Eager Haskell, Haskell++ oder Eden ent­wi­ckelt, die sich eng an Haskell ori­en­tie­ren. Auch einige gänzlich neue Pro­gram­mier­spra­chen haben sich an Haskell ori­en­tiert. Die uni­ver­sel­le Sprache Python, die zu den wich­tigs­ten modernen Internet-Pro­gram­mier­spra­chen zählt, hat bei­spiels­wei­se die Lambda-Notation und die Haskell-Lis­ten­ver­ar­bei­tungs­syn­tax über­nom­men.

Was kann man mit Haskell als Pro­gram­mier­spra­che machen?

Es kostet eine Menge Arbeit, Zeit und Geld, große Software-Projekte zu ent­wi­ckeln und zu pflegen. Funk­tio­na­le Pro­gram­mier­spra­chen wie Haskell können hierbei für Ent­las­tung sorgen. Dabei weiß Haskell ins­be­son­de­re mit folgenden Vorzügen zu über­zeu­gen:

  • Die Pro­duk­ti­vi­tät der Ent­wick­ler lässt sich si­gni­fi­kant steigern.
  • Der Code von Haskell-Software ist kurz, über­sicht­lich und leicht zu warten.
  • Haskell-An­wen­dun­gen sind weniger feh­ler­an­fäl­lig und bieten eine hohe Zu­ver­läs­sig­keit.
  • Die „se­man­ti­sche“ Lücke zwischen Pro­gram­mie­rer und der Sprache ist minimal.

Haskell ist somit als Pro­gram­mier­spra­che für ein großes Spektrum an An­wen­dun­gen geeignet. Ins­be­son­de­re für Programme, die ein hohes Maß an Mo­di­fi­zier­bar­keit und War­tungs­freund­lich­keit bieten sollen, ist die funk­tio­na­le Sprache prä­de­sti­niert. Auch bei der Aus­ar­bei­tung von Spe­zi­fi­ka­tio­nen bzw. Pro­to­ty­pen, die tat­säch­lich aus­ge­fü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 ma­the­ma­ti­scher Al­go­rith­men er­for­der­lich ist, fällt die Wahl der Pro­gram­mier­spra­che nicht selten auf Haskell. Typische Beispiele sind An­wen­dun­gen zur Netz­werk­si­cher­heit, Spe­zi­fi­ka­ti­ons-Frame­works für ein­ge­bet­te­te Systeme oder Programme zur Mo­del­lie­rung komplexer ma­the­ma­ti­scher Be­rech­nun­gen.

Hinweis

Für die Pro­gram­mie­rung einfacher Programme stellt Haskell keine geeignete Wahl dar.

Wie un­ter­schei­det sich Haskell von anderen Pro­gram­mier­spra­chen?

Als rein funk­tio­na­le Pro­gram­mier­spra­che hebt sich Haskell von vielen anderen Sprachen ab. Ins­be­son­de­re die Un­ter­schie­de zu Sprachen, die sich am im­pe­ra­ti­ven Pro­gram­mier­pa­ra­dig­ma ori­en­tie­ren, sind si­gni­fi­kant: Programme, die in im­pe­ra­ti­ven Sprachen ge­schrie­ben sind, führen Folgen von An­wei­sun­gen aus. Noch während der Aus­füh­rung kann sich der Status dieser An­wei­sun­gen ändern, bei­spiels­wei­se indem Variablen geändert werden. Kon­troll­fluss­struk­tu­ren sorgen dabei dafür, dass sich An­wei­sun­gen mehrfach ausführen lassen.

Beim funk­tio­na­len Ansatz, der Haskell zugrunde liegt, gibt die Software dem Computer keine direkten Befehle, wie er etwas machen soll. Statt­des­sen wird das Problem bzw. dessen Lösung be­schrie­ben. Variablen sind un­dy­na­misch: Eine Variable mit dem Wert „1“ hat in Haskell und anderen funk­tio­na­len Sprachen dauerhaft den Wert „1“ und kann nicht einfach so ab­ge­än­dert werden. Funk­tio­nen erfüllen lediglich den Zweck, etwas zu berechnen und das ent­spre­chen­de Ergebnis zu­rück­zu­ge­ben.

Haskell lernen: Vor­aus­set­zun­gen, 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 pro­gram­mie­ren, sofern sich die Sprache als Basis eignet. Zum anderen sind Sie bestens vor­be­rei­tet, wenn Sie sich mit fremden An­wen­dun­gen aus­ein­an­der­set­zen müssen, die in Haskell ge­schrie­ben sind. Da Haskell außerdem eine Art Standard für funk­tio­na­le Pro­gram­mier­spra­chen darstellt, lohnt sich das Erlernen auch, wenn Sie all­ge­mei­nes Know-how in puncto funk­tio­na­ler Pro­gram­mie­rung aufbauen möchten.

Wie bei vielen anderen Sprachen haben Sie zwei Mög­lich­kei­ten, Haskell-Code zu ver­ar­bei­ten: sta­pel­wei­se mit einem Compiler oder in­ter­ak­tiv mit einem In­ter­pre­ter. Ein in­ter­ak­ti­ves System bietet den Vorteil, eine passende Kom­man­do­zei­le mit­zu­lie­fern, in der Sie direkt ex­pe­ri­men­tie­ren und Ausdrücke auswerten können. Für einen einfachen Einstieg in die Pro­gram­mier­spra­che Haskell ist es also in jedem Fall zu prä­fe­rie­ren. Zu den be­kann­tes­ten Ver­tre­tern zählt der mitt­ler­wei­le nicht mehr aktiv wei­ter­ent­wi­ckel­te In­ter­pre­ter Hugs. Al­ter­na­tiv liefert GHC (Glasgow Haskell Compiler) das prak­ti­sche Kom­plett­pa­ket aus Haskell-In­ter­pre­ter und -Compiler.

Tipp

Wie sich die Arbeits- und Funk­ti­ons­wei­se von In­ter­pre­tern und Compilern genau un­ter­schei­det, verrät unser Artikel „Compiler vs. In­ter­pre­ter – De­fi­ni­ti­on und Un­ter­schie­de“.

Ein einfaches Beispiel für die Ar­beits­wei­se 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 de­kla­riert, die Integer (ganze Zahlen) als Eingabe- und Aus­ga­be­wer­te haben soll. In Zeile 2 ist die Funktion konkret definiert: Zwei Argumente werden addiert, das Ad­di­ti­ons­er­geb­nis soll prä­sen­tiert werden. Als Input werden die beiden Werte „2“ und „5“ geliefert. Die Aus­füh­rung dieses Snippets führt zu folgender Ausgabe:

Die Summe der beiden Zahlen ist: 7
Tipp

Wei­ter­füh­ren­de Tipps und Tricks für den Einstieg in die Syntax und Funk­ti­ons­wei­se von Haskell erhalten Sie in unserem um­fang­rei­chen Haskell-Tutorial.

Zum Hauptmenü