Конктруктор - являеться значением. Им можно оперировать в программе как любым дригим значением, Например как строкой или числом
Тип - работает так же как и в других языках
data 'тип' = 'конструктор'
- Единичный тип. Тип сосоящий из одного конструктора
-
Объявление
data A = A
data A = B
Пространство имён типов не пересекается с пространством имён конструкторов,
поэтому конструктор можно называть так же как и тип.
В дальнейшем чтении не путать имена типа и имена конструторов -
Использование
Единичные типы данных не дают ничего, кроме знания о том, что он есть.
Из распространённых типов данных используются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
- кон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 "СТРОКА"