«Алгебраические типы данных» в Haskell поддерживают полный параметрический полиморфизм, который является более технически правильным названием для универсальных типов, в качестве простого примера тип данных списка:
data List a = Cons a (List a) | Nil
Эквивалентен (насколько это возможно, игнорируя нестрогую оценку и т. Д.)
class List<a> {
class Cons : List<a> {
a head;
List<a> tail;
}
class Nil : List<a> {}
}
Конечно, система типов Haskell допускает более ... интересное использование параметров типа, но это всего лишь простой пример. Что касается названия «Алгебраический тип», я, честно говоря, никогда не был полностью уверен в точной причине, по которой они были названы так, но предполагал, что это связано с математической основой системы типов. Я верю, что причина сводится к теоретическому определению ADT как "продукта набора конструкторов", однако с тех пор, как я сбежал из университета, прошло несколько лет, поэтому я больше не могу вспомнить специфика.
[Изменить: Спасибо Крису Конвею за указание на мою глупую ошибку, ADT, конечно, являются типами сумм, конструкторами, предоставляющими продукт / кортеж полей]
person
olliej
schedule
19.08.2008