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!