Я немного не понимаю разницы между типом и типом данных в Haskell.
Из литературы, с которой я столкнулся, у меня сложилось впечатление, что это разные понятия.
Я немного не понимаю разницы между типом и типом данных в Haskell.
Из литературы, с которой я столкнулся, у меня сложилось впечатление, что это разные понятия.
Тип и тип данных относятся к одному и тому же понятию.
Однако ключевые слова Haskell type
и data
различны: data
позволяет ввести новый алгебраический тип данных, а type
просто делает его синонимом.
Подробнее см. в вики Haskell.
newtype
. Уловить разницу между newtype T a = T a
и data T a = T a
сложно, но очень важно.
- person Alexandre C.; 27.10.2011
newtype
- это просто тип времени компиляции, используемый для создания своего рода синонима, но рассматриваемый как другой тип. Вы можете обернуть его внутри data
, но это добавит некоторые накладные расходы во время выполнения. newtype
явно указывает компилятору, что вы хотите различать типы без накладных расходов во время выполнения. Для длинной истории: haskell.org/haskellwiki/Newtype
- person Ptival; 27.10.2011
Термины иногда смешиваются, но обычно «тип данных» относится к типу, введенному с помощью ключевого слова data
, у которого есть конструкторы, с которыми вы можете сопоставлять шаблоны. Их также называют алгебраическими типами данных».
Просто «тип» — это более общий термин, который также включает типы, созданные с использованием newtype
, типы функций и так далее.