data
definiert.
In der englischen Literatur werden sie als "algebraic Datatype" bezeichnet.
Die Definition selber ist stark an abstrakte Syntax angelehnt.
Sie gebinnt mit dem Schlüsselwort data
, gefolgt von dem Namen des neuen Typs.
Darauf folgt ein Gleichzeichen.
Die rechte Seite beseht aus Konstruktoren und Verknüpfungen dieser.
Ein Konstruktor besteht aus einem Namen gefolgt von Parametern.
Parameter sind Basisdatentypen oder abstrakte Datentypen.
Die Verknüpfungsoperatoren sind [ ]
für eine Liste oder |
für eine Alternative (oder).
Syntax
data
TypeName = Defintion
Definition = ( Konstruktor | Typ )*
Konstruktor = Name Typ*
Verknüpfungsoperatoren
|
OR
[ ]
LISTE
Beispiel: Person mit Name, Alter, Geschlecht und Liste von z.B. Kindern
data People = Person Name Age Gender [ People ]
newtype Name = String
newtype Age = Int
date Gender = Female | Male
Durch die Konstruktion eines abstrakten Datentypes erhält dieser einen eindeutigen Typ.
Beim Pattern Matching kann der Compiler Typchecks durchführen.
Ein Parameter vom Typ People
würde z.B. nicht mit einem Tupel (String, Int, Gender)
übereinstimmen.