Haskell: Как я могу создать пустой список в качестве опции для типа данных? - PullRequest
0 голосов
/ 03 апреля 2019

В Haskell, использующем компилятор ghci, требуется создать тип данных, который либо пуст, либо имеет тройной тип.Я пытался создать пустой тип, но мой тип данных E не позволяет мне его использовать.Как вы правильно объявляете это?

type Empty = []
data E = Zero Empty | Triple A B C

Я продолжаю получать эту ошибку: ожидание еще одного аргумента «Пусто» Ожидается тип, но «Пусто» имеет вид '* -> *'

1 Ответ

3 голосов
/ 03 апреля 2019

Вы смешиваете конструкторы типов и данных и используете конструктор type [] (через псевдоним Empty, где ожидается простой тип.

Рассмотрим псевдо-Haskell определение конструктора списка:

data [] a = [] | a : ([] a)

Здесь [] является как конструктором типа с типом * -> *, так и конструктором нулевых данных с типом [a], представляющим пустые списки.

Для вашего типа сделайте то же самое: Zero - это просто нулевой конструктор данных.

data E = Zero | Triple A B C

(при условии, что A, B и C являются фиксированными типами. Если вы пытаетесь определить тройку произвольных типов, вам необходимо параметризовать E:

data E a b c = Zero | Triple a b c

).

...