代数数据类型

代数数据类型（，缩写：ADT）是一种复合类型，指由其他資料類型组合而成的类型，在電腦编程中，尤其是函数式编程和类型论中應用。

两类常见的代数类型是（即元组和记录）与和类型（即标签联合） 。Records and variants- OCaml manual section 1.4 

一个积类型的值通常包含多个值，即字段。该类型的所有值都有相同的字段类型组合。一个积类型的所有可能值的集合是其字段类型的所有可能值的集合的集合论乘积，即笛卡尔积。

一个和类型的值通常被分组为多个类别，即变体。一个变体类型的值通常是用一个叫做构造器的准功能实体创建的。每个变体都有自己的构造函数，它接受指定数量的参数，并具有指定的类型。和类型的所有可能值的集合是其变体的所有可能值的集合的集合论之和，即不相连的联合。枚举类型是和类型的一个特例，其中构造函数不需要参数，因为每个构造函数只定义一个值。

代数类型的值是用模式匹配来分析的，它通过构造函数或字段名来识别一个值，并提取它所包含的数据。

代数数据类型被引入到Hope中。Hope是一个20世纪70年代在爱丁堡大学开发的小型函数式编程语言。

 支持代数数据类型的编程语言 
许多编程语言将代数数据类型作为一等类型概念，包括：

 Ceylon
 Clean
 CoqCalculus of Inductive Constructions , and basic standard libraries : Datatypes  and Logic .
 C++
 Elm
 FlowFlow 
 F#
 F*
 Free Pascal
 Haskell
 Haxe
 Hope
 Idris
 Java 15
 Kotlin
 Limbo
 Language Of Temporal Ordering Specification (LOTOS)
 Mercury
 Miranda
 Nemerle
 Nim
 OCaml
 Opa
 OpenCog
 Perl
 PureScript
 Racket
 Reason
 Rust
 Scala
 Standard ML
 Swift
 Tom
 TypeScript
 Visual Prolog

 参考文献