GADTs: разница между «алгебраическим» и «Абстрактным»?

#haskell #abstract-data-type #algebraic-data-types #gadt

#хаскелл #абстрактный тип данных #алгебраические типы данных #gadt

Вопрос:

Кажется, термины «Обобщенный абстрактный тип данных» и «Обобщенный алгебраический тип данных» используются взаимозаменяемо, но я уверен, что технически это не одно и то же.

Может ли кто-нибудь объяснить разницу, возможно, используя простой пример в контексте Haskell?

Комментарии:

1. AFAIK, «GADT» в Haskell всегда означает обобщенный алгебраический тип данных. Термин «Абстрактный тип данных» происходит из мира объектно-ориентированного программирования и относится к чему-то совершенно другому. Где вы видели «Обобщенный абстрактный тип данных»?

2. В основном все результаты поиска, которые я вижу для «Обобщенного абстрактного типа данных», относятся к людям, которые используют этот термин для обозначения того, что мы обычно называем «GADT» или «Обобщенный алгебраический тип данных».

3. @KeshavKini, согласен, с тем, что абстрактные типы данных не имеют ничего общего с OO. Фактически, они являются антиподом абстракции в стиле OO. ML и даже Haskell в некоторой степени поддерживают ADT через свою модульную систему.

4. Кстати, некоторые из ранних работ по GADTs называли их GRDT (R = рекурсивный), поскольку ADT имеет давнее значение как абстрактный тип данных, и его чтение как алгебраический DT, вероятно, было недоразумением в большинстве случаев.

5. @augustss: Леннарт, интересно, почему это не сработало? 🙂

Ответ №1:

Не существует независимого понятия с именем обобщенный абстрактный тип данных. Фраза «обобщенный абстрактный тип данных» иногда неправильно используется для обобщенного алгебраического типа данных. Эта ошибка возникает из-за того, что и «алгебраический тип данных», и «абстрактный тип данных» сокращаются как «ADT».

Комментарии:

1. Приветствую босса, понял 🙂