Изучай Haskell во имя добра! (Липовача)

1

В современных версиях интерпретатора GHCi для печати результатов вычислений используется функция >show, которая представляет кириллические символы соответствующими числовыми кодами Unicode. Поэтому в следующем листинге вместо строки "лама" будет фактически выведено "\1083\1072\1084\1072". В тексте книги для большей понятности кириллица в результатах оставлена без изменений. – Прим. ред.

2

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

3

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

4

Вообще говоря, конструкцию с >if можно определить в виде функции:

>if' :: Bool –> a –> a –> a

>if' True x _ = x

>if' False _ y = y

Конструкция введена в язык Haskell на уровне ключевого слова для того, чтобы минимизировать количество скобок в условных выражениях. – Прим. ред.

5

Следует отметить, что операторами называются двухместные инфиксные функции, имена которых состоят из служебных символов: >+, >*, >>>= и т. д. – Прим. ред.

6

Однако есть нульместный кортеж, обозначаемый в языке Haskell как >(). – Прим. ред.

7

На деле в образцах нельзя использовать операторы, представляющие собой двухместные функции (например, >+, >/ и >++), поскольку при сопоставлении с образцами производится, по сути, обратная операция. Как сопоставить заданное число 5 с образцом >(x + y)? Это можно сделать несколькими способами, то есть ситуация неопределённа. Между тем оператор >: является конструктором данных (все бинарные операторы, начинающиеся с символа >:, могут использоваться как конструкторы данных), поэтому для него можно произвести однозначное сопоставление. — Прим. ред.

8

Это так. В качестве упражнения повышенной сложности читателю рекомендуется реализовать при помощи свёртки функции >drop и >dropWhile из стандартной библиотеки. – Прим. ред.

9

В тех же целях издательством «ДМК Пресс» выпущена книга: Душкин Р. В. Справочник по языку Haskell. – М.: ДМК Пресс, 2008. – 544 стр., ил. ISBN 5–94074–410–9.

10

На самом деле в синтаксисе языка Haskell имеются ещё так называемые (n + k)-образцы. Впрочем, большая часть сообщества языка их отвергает. – Прим. ред.

11

Текст этого раздела переработан в соответствии с современным стилем обработки исключений. – Прим. ред.

12

Читателей, знакомых с комбинаторной логикой, такое определение экземпляра класса >Applicative для функционального типа смутить не должно – методы определяют комбинаторы K и S соответственно. – Прим. ред.

13

Специалисты по нечёткой логике могут увидеть в этом определении троичную логику Лукасевича. – Прим. ред.

14

Это определение представляет собой один из возможных способов обхода двоичного дерева: «левый – корень – правый». Читатель может самостоятельно реализовать экземпляры для представления других способов обхода двоичных деревьев. – Прим. ред.

15

Если версия пакетов языка >Haskell base и >mtl, установленных в вашей системе, выше соответственно 4.3.1.0 и 2.0.1.0, вам нужно импортировать модуль >Control.Monad.Error в ваш скрипт или >Control.Monad.Instances в интерпретатор GHCi, перед тем как вы сможете использовать функции экземпляра класса >Monad для типа >Either. Это связано с тем, что в этих версиях пакетов объявления экземпляров были перенесены в модуль >Control.Monad.Instances. – Прим. перев.