Selektoren in Haskell
Selektorfunktionen ermöglichen den Zugriff auf die einzelnen Felder eines Datentyps. Sie werden in Haskell durch Dekonstruktion in Haskell definiert.
-- Datentyp mit Record-Syntax (benannte Felder)
data Shape = Circle {center::Point, radius::Double}
| Square {anchor::Point, length::Double}
Wie funktionieren Selektoren?
Für jeden Feldnamen wird automatisch eine Funktion generiert, die den Wert dieses Felds aus einer Instanz des Datentyps extrahiert.
-- Selektor für 'center'
center :: Shape -> Point
center (Circle c r) = c -- Dekonstruktion: Wir interessieren uns nur für 'c'
-- Selektor für 'radius'
radius :: Shape -> Double
radius (Circle c r) = r -- Wieder Dekonstruktion, diesmal für 'r'
Wichtiger Hinweis: Selektoren sind nur für den passenden Konstruktor definiert.
-- Dies ist ein Fehler: 'center' kann nicht für 'Square' verwendet werden!
center (Square (Point 1 2) 3.0) -- Geht nicht!