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 (
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