Algebraischer Datentyp
Typen, die aus "Summe" (oder) und "Produkt" (und) aufgebaut sind — Rust enum, Haskell data, OCaml type. Ermöglicht Pattern Matching und erschöpfende Prüfung zur Kompilierzeit.
Produkttyp = Struct/Tuple (enthält A und B). Summentyp = Enum/Union (enthält A oder B). Rekursiv kombinierbar: enum Tree { Leaf, Node(Tree, i32, Tree) }. Entstanden aus der ML/Haskell-Tradition, verbreitet in Rust, Swift, Kotlin, TypeScript (über Tagged Unions) und Scala 3. Entscheidend für das Designprinzip "unzulässige Zustände nicht darstellbar machen" — ist ein Nutzer entweder "Anonymous" oder "LoggedIn { id, name }", kann der Compiler zur Kompilierzeit sicherstellen, dass kein Fall vergessen wird.