Введение в алгебраические типы данных

До сих пор мы сталкивались со многими типами данных – Bool, Int, Char, Maybe и др. Но как создать свой собственный тип? Один из способов – использовать ключевое слово data. Давайте посмотрим, как в стандартной библиотеке определён тип Bool:

data Bool = False | True

Ключевое слово data объявляет новый тип данных. Часть до знака равенства вводит идентификатор типа, в данном случае Bool. Часть после знака равенства – это конструкторы данных, которые также называют конструкторами значений. Они определяют, какие значения может принимать тип. Символ | означает «или». Объявление можно прочесть так: тип Bool может принимать значения True или False. И имя типа, и конструкторы данных должны начинаться с прописной буквы.

Рассуждая подобным образом, мы можем думать, что тип Int объявлен так:

data Int = –2147483648 | –2147483647 | ... | –1 | 0 | 1 | 2 | ... | 2147483647

Первое и последнее значения – минимальное и максимальное для Int. На самом деле тип Int объявлен иначе – видите, я пропустил уйму чисел – такая запись полезна лишь в иллюстративных целях.