代数的データ型
「直和」(または)と「直積」(かつ)で組み立てる型。Rustのenum、Haskellのdata、OCamlのtypeが該当し、パターンマッチとコンパイル時の網羅性検査を可能にする。
直積型はstructやタプル(AかつBを持つ)、直和型はenumやユニオン(AまたはBを持つ)である。これらを再帰的に組み合わせられる。例:enum Tree { Leaf, Node(Tree, i32, Tree) }。MLやHaskellの系譜から生まれ、Rust、Swift、Kotlin、TypeScript(タグ付きユニオン経由)、Scala 3へ広がった。「不正な状態を表現不可能にする」設計の要である。ユーザーが「Anonymous」か「LoggedIn { id, name }」のどちらかなら、どちらかのケースの処理漏れをコンパイル時に強制できる。