Benutzerdefinierte Datentypen werden mit dem data-Befehl deklariert:
data Datatype a1 ... an = constr1 | ... | constrmwobei Datatype der Name (beginnend mit einem groBuchstaben) des neuen n-stelligen Typkonstruktors ist (
),
verschiedene Typvariablen sind und constr1
...constrm (
) die Art beschreiben, in der die
Elemente des neuen Datentyps konstruiert werden. Dabei
können die Konstruktoren (constr) als
Konstruktorfunktionen (beginnend mit einem groBuchstaben) oder als Konstruktoroperatoren (beginnend mit
einem Doppelpunkt) dargestellt werden:
data Tag = Son | Mon | Die | Mit | Don | Fre | Sam
neuer 0-stelliger Datentyp Tag, der als Wert eine von sieben 0-stelligen Konstruktorfunktionen annehmen kann
data Temp = Celsius Float | Fahrenheit Float
a :: Temp
a = Celsius 0.0
a = Fahrenheit 32.0
0-stelliger Datentyp Temp mit zwei einstelligen Konstruktorfunktionen
data Set a = Set [a]
m :: Set Int
m = Set [1, 2, 3]
n :: Set Float
n = [1.4, 4.8]
einstelliger Datentyp mit einstelliger Konstruktorfunktion
data Tree a = Lf a | Tree a :^: Tree a
b :: Tree Int
b = Lf 2 :^: ( Lf 4 :^: Lf 6)
einstelliger Datentyp mit Konstruktorfunktion und Konstruktoroperator