data Unit = Unit
Unit n'a qu'une seule valeur : Unit, aussi notée ().
import nécessaire.data Unit = Unit
Unit n'a qu'une seule valeur : Unit, aussi notée ().
data Bool = True | False
Bool a deux valeurs. Utilisé par if-then-else et les gardes.
data Nat
= Z
| S Nat
Nat est le type des entiers naturels (0, 1, 2, ...). Z est zéro, S n est le successeur de n. Représenté en interne par des entiers de précision arbitraire, pas en Peano.
Zzéro
Sle successeur d'un naturel (S n = n + 1)
data String
= Empty
| Cons Char String
String est un texte, rangé d'un bloc (UTF-8), pas fait de cellules. Ces deux constructeurs sont sa VUE : une chaîne est Empty, ou Cons c s — son premier caractère c suivi du reste s — dans un motif comme dans une expression (Cons 'a' "bc" vaut "abc"). Comme pour Nat, le compilateur garde la forme native.
Emptyla chaîne vide, aussi notée ""
Consun premier caractère devant le reste
data Pair a b = Pair a b
Pair regroupe deux valeurs. Notée (a, b) via la notation ci-dessous.
data Maybe a
= Nothing
| Just a
Maybe représente une valeur optionnelle : Nothing ou Just x.
Nothingaucune valeur
Justune valeur, enveloppée
data Either a b
= Left a
| Right b
Either représente un choix entre deux types. Par convention, Left est le cas d'erreur et Right le cas de succès.
Leftpar convention, le cas d'erreur
Rightpar convention, le cas de succès
data Result e a
= Ok a
| Error e
Result représente une opération qui peut échouer : Ok x transporte une valeur de succès, Error e transporte une erreur. Contrairement à Either, les noms des constructeurs disent quel côté est lequel (comme en OCaml/F#/Gleam). Le type de l'erreur vient en premier afin que les opérations à la map agissent sur la valeur de succès (le dernier paramètre).
Oksuccès, porteur d'une valeur
Erroréchec, transportant une erreur
data List a
= Nil
| a :: List a
List est la structure de données récursive fondamentale. :: est un constructeur infixe (comme le : de Haskell).
Nilla liste vide, aussi écrite []
::un élément de tête devant une liste de queue (infixe, comme le : de Haskell)