В современных версиях интерпретатора GHCi для печати результатов вычислений используется функция >show
, которая представляет кириллические символы соответствующими числовыми кодами Unicode. Поэтому в следующем листинге вместо строки "лама" будет фактически выведено "\1083\1072\1084\1072". В тексте книги для большей понятности кириллица в результатах оставлена без изменений. – Прим. ред.
На самом деле любую функцию, число параметров которой больше одного, можно записать в инфиксной форме, заключив её имя в обратные апострофы и поместив её в таком виде ровно между первым и вторым аргументом. – Прим. ред.
На самом деле в определении функций они называются образцами, но об этом пойдёт речь далее. – Прим. ред.
Вообще говоря, конструкцию с >if
можно определить в виде функции:
>if' :: Bool –> a –> a –> a
>if' True x _ = x
>if' False _ y = y
Конструкция введена в язык Haskell на уровне ключевого слова для того, чтобы минимизировать количество скобок в условных выражениях. – Прим. ред.
Следует отметить, что операторами называются двухместные инфиксные функции, имена которых состоят из служебных символов: >+
, >*
, >>>=
и т. д. – Прим. ред.
Однако есть нульместный кортеж, обозначаемый в языке Haskell как >()
. – Прим. ред.
На деле в образцах нельзя использовать операторы, представляющие собой двухместные функции (например, >+
, >/
и >++
), поскольку при сопоставлении с образцами производится, по сути, обратная операция. Как сопоставить заданное число 5 с образцом >(x + y)
? Это можно сделать несколькими способами, то есть ситуация неопределённа. Между тем оператор >:
является конструктором данных (все бинарные операторы, начинающиеся с символа >:
, могут использоваться как конструкторы данных), поэтому для него можно произвести однозначное сопоставление. — Прим. ред.
Это так. В качестве упражнения повышенной сложности читателю рекомендуется реализовать при помощи свёртки функции >drop
и >dropWhile
из стандартной библиотеки. – Прим. ред.
В тех же целях издательством «ДМК Пресс» выпущена книга: Душкин Р. В. Справочник по языку Haskell. – М.: ДМК Пресс, 2008. – 544 стр., ил. ISBN 5–94074–410–9.
На самом деле в синтаксисе языка Haskell имеются ещё так называемые (n + k)-образцы. Впрочем, большая часть сообщества языка их отвергает. – Прим. ред.
Текст этого раздела переработан в соответствии с современным стилем обработки исключений. – Прим. ред.
Читателей, знакомых с комбинаторной логикой, такое определение экземпляра класса >Applicative
для функционального типа смутить не должно – методы определяют комбинаторы K и S соответственно. – Прим. ред.
Специалисты по нечёткой логике могут увидеть в этом определении троичную логику Лукасевича. – Прим. ред.
Это определение представляет собой один из возможных способов обхода двоичного дерева: «левый – корень – правый». Читатель может самостоятельно реализовать экземпляры для представления других способов обхода двоичных деревьев. – Прим. ред.
Если версия пакетов языка >Haskell base
и >mtl
, установленных в вашей системе, выше соответственно 4.3.1.0 и 2.0.1.0, вам нужно импортировать модуль >Control.Monad.Error
в ваш скрипт или >Control.Monad.Instances
в интерпретатор GHCi, перед тем как вы сможете использовать функции экземпляра класса >Monad
для типа >Either
. Это связано с тем, что в этих версиях пакетов объявления экземпляров были перенесены в модуль >Control.Monad.Instances
. – Прим. перев.