В чем разница между типом и типом данных в Haskell?

Я немного не понимаю разницы между типом и типом данных в Haskell.

Из литературы, с которой я столкнулся, у меня сложилось впечатление, что это разные понятия.


person user997112    schedule 27.10.2011    source источник


Ответы (2)


Тип и тип данных относятся к одному и тому же понятию.

Однако ключевые слова Haskell type и data различны: data позволяет ввести новый алгебраический тип данных, а type просто делает его синонимом.

Подробнее см. в вики Haskell.

person Fred Foo    schedule 27.10.2011
comment
Для полноты картины есть еще newtype. Уловить разницу между newtype T a = T a и data T a = T a сложно, но очень важно. - person Alexandre C.; 27.10.2011
comment
я видел этот новый тип на примере. Так в чем разница в вашем примере? - person user997112; 27.10.2011
comment
@ user997112 newtype - это просто тип времени компиляции, используемый для создания своего рода синонима, но рассматриваемый как другой тип. Вы можете обернуть его внутри data, но это добавит некоторые накладные расходы во время выполнения. newtype явно указывает компилятору, что вы хотите различать типы без накладных расходов во время выполнения. Для длинной истории: haskell.org/haskellwiki/Newtype - person Ptival; 27.10.2011

Термины иногда смешиваются, но обычно «тип данных» относится к типу, введенному с помощью ключевого слова data, у которого есть конструкторы, с которыми вы можете сопоставлять шаблоны. Их также называют алгебраическими типами данных».

Просто «тип» — это более общий термин, который также включает типы, созданные с использованием newtype, типы функций и так далее.

person hammar    schedule 27.10.2011
comment
Так будет ли тип включать Integer и т. д.? - person user997112; 27.10.2011