Haskell – Pure Functional Programming

Haskell ist eine rein funktionale, statisch typisierte Programmiersprache mit Lazy Evaluation. Das bedeutet: Funktionen haben keine Seiteneffekte, Variablen sind unveränderlich, und Ausdrücke werden erst ausgewertet, wenn ihr Wert wirklich gebraucht wird. Haskell eignet sich hervorragend, um komplexe Algorithmen kompakt und nachweisbar korrekt zu formulieren.

GHC & GHCi – Compiler und REPL

  • ghc --version – Compiler-Version prüfen
  • ghc Datei.hs – kompiliert zu einer ausführbaren Datei
  • ghc -O2 Datei.hs – mit Optimierung kompilieren
  • ghci – interaktive REPL (Read-Eval-Print-Loop) starten
  • :load Datei.hs bzw. :l – Modul in GHCi laden
  • :t ausdruck – Typ eines Ausdrucks anzeigen
  • :info name – Informationen zu einer Funktion
  • :quit bzw. :q – GHCi beenden

Basissyntax

-- Kommentar
fac :: Integer -> Integer      -- Typ-Signatur
fac 0 = 1                     -- Basisfall
fac n = n * fac (n - 1)       -- Rekursion

main :: IO ()
main = print (fac 20)

Wichtige Konzepte

  • Pure Functions: gleiche Eingabe, gleiche Ausgabe, keine Seiteneffekte
  • Immutable Data: Werte sind unveränderlich; „Ändern“ erzeugt neue Werte
  • Lazy Evaluation: Ausdrücke werden nur bei Bedarf ausgewertet – erlaubt unendliche Listen wie take 5 [1..]
  • Higher-Order Functions: map, filter, foldr/foldl
  • Typklassen: Num, Eq, Ord, Show – generische Funktionen
  • Monaden: kapseln Seiteneffekte (IO), Fehler (Maybe/Either) und Zustand – z. B. do-Notation

Nützliche Funktionen

map (*2) [1,2,3]        -- [2,4,6]
filter even [1..10]     -- [2,4,6,8,10]
foldr (+) 0 [1..100]    -- 5050
take 5 (repeat 7)       -- [7,7,7,7,7]

Pakete: Cabal und Stack

  • cabal update – Paketindex aktualisieren
  • cabal install <paket> – Paket installieren
  • stack build – Projekt bauen
  • stack ghci – REPL im Projektkontext

Weitere Sprachen im Glossar: Scala, Elixir & Erlang und Julia. Grundlagen funktionaler Konzepte: Algorithmus und Compiler.