выглядит так. Но что это такое, что означает data constructor?
Например, вот код:
data RhType = Pos | Neg
data ABOType = A | B | AB | O
data BloodType = BloodType ABOType RhType
patient1BT :: BloodType
patient1BT = BloodType A Pos
Здесь объявлен тип BloodType. BloodType слева от знака равно – это type constructor, а справа – это data constructor. Чем отличаются эти сущности?
Как я понял из практики и дальнейшего чтения, type constructor объявляет тип, а data constructor объявляет конструктор этого типа. Например:
type FirstName = String
type MiddleName = String
type LastName = String
data Name = ShortName FirstName LastName
| NameWithMiddle FirstName MiddleName LastName
Name – это название типа. Используем там, где хотим указать значения такого типа.
А ShortName и NameWithMiddle – это data constructor'ы. Используем их для создания значений типа Name. Это верно? В книге про это не сказано там, где я ожидал такого пояснения.
все примерно так, как вы догадались.
type constructor создаёт значение на уровне типов, которые участвуют в сигнатуре, конструкторы значений создают значения типов которые создают конструкторы типов
Обсуждают сегодня