Конктруктор - являеться значением. Им можно оперировать в программе как любым дригим значением, Например как строкой или числом
Тип - работает так же как и в других языках
data 'тип' = 'конструктор'
- Единичный тип. Тип сосоящий из одного конструктора
-
Объявление
data A = A
data A = B
Пространство имён типов не пересекается с пространством имён конструкторов,
поэтому конструктор можно называть так же как и тип.
В дальнейшем чтении не путать имена типов и имена конструторов * 1 -
Использование
Единичные типы данных не дают ничего, кроме знания о том, что он есть.
Из распространённых типов данных используютсяdata () = ()
data Unit = Unit
data 'тип' = 'конструктор' 'параметр' ['может быть сколько угодно параметров']
-
Объявление
При объявлении мы указываем
'конструктор' 'тип'
.
В параметре конcтруктора указываеться тип значения которое он может приниматьdata A = A Int
data B = B String
data С = С Int String
data D = D A B
- конcтруктор
D
применяеться к типуA
который состоит из конструктораA Int
,
и к типуB
который состоит из конструктораB String
. см. * 1
- конcтруктор
-
Использование
При использовании мы указываем
'конструктор' 'значение'
Конструктор служит своеобразным контейнером для значения.A 10
B "СТРОКА"
C 10 "СТРОКА"
D (A 10) (B "СТРОКА")
data 'тип' 'общий_тип' = 'конструктор' 'общий_тип'
-
Объявление
Mожно не ограничеваться только примитивными значениями и конструкторами
при объявлении типа конструктора.
для этого следует передавать общий тип.
Общий тип сам по себе конструктор не может принимать, его нужно передавать через типdata A a = A a
data A a b = A a b
-
Использование
A 10
A "СТРОКА"
B 10 "СТРОКА"
-
data Bool = False | True
-
data ABC = A | B | C
Суммарные типы данных названы потому, что они суммируют типы данных, которые их составляют.
Например, если суммировать единичные типы данных, получается перечисление.
-
data Pair a b = Pair a b
-
data Triple a b c = Triple a b c
Типы произведений названы так, что их можно представить как произведение нескольких типов, которые его составляют.
-
data Maybe a = Nothing | Just a
теперь мы можем комбинировать суммы типов с произведением, и получать более сложные типы
data List a = Nil | Cons a (List a)
- Записи
- Вставки или Враперы
- Степенные типы данных
- Фантомные типы данных
- Экзистенциальные типы данных
- Обобщённые Алгебраические Типы Данных (GADTs)
- Параметрические типы данных с ограниченными параметрами