Dekonstruktion in Haskell

Pattern Matching in Haskell ist eines der mächtigsten Konzepte in Haskell. Es erlaubt uns, Werte nicht nur zu prüfen, sondern sie auch zu zerlegen ("dekonstruieren").

1. Pattern Matching auf Literalen

Die einfachste Form ist das Matching auf konkrete Werte wie Zahlen oder Zeichen.

-- Bisher bekannt: Matching auf Literale
mul x 1 = x
mul _ 0 = 0 -- Der Wildcard '_' matcht alles, was nicht benötigt wird.
ucase 'a' = 'A'

2. Pattern Matching auf Konstruktoren

Die wahre Stärke zeigt sich beim Umgang mit eigenen Datentypen. Hier werden die Datenstrukturen dekonstruiert, d.h. in ihre Bestandteile zerlegt.

Wir können für jeden Konstruktor eines Summentyps einen eigenen Fall definieren.

Beispiel: Eine size-Funktion für den Shape-Typ

-- Die Funktion wird für jeden Konstruktor (Circle, Square) definiert
size :: Shape -> Double

-- 1. Fall: Wenn die 'Shape' ein 'Circle' ist...
-- ...dekonstruiere sie und binde die inneren Werte an die Variablen 'c' und 'r'.
size (Circle c r) = 3.14159 * r * r

-- 2. Fall: Wenn die 'Shape' ein 'Square' ist...
-- ...dekonstruiere sie in 'a' und 'l'.
size (Square a l) = l * l