Учебник по Haskell | страница 17



называть значениями, а другие говорят о самих описаниях. Например это слова “числа”, “цвета” или “люди”.

Есть конкретное число: один два или три, а есть все числа. Такие описания мы будем называть типами. Типы

описывают множество значений. Функции описывают одни значения через другие. Это такие шаблоны описа-

ний. Типичный пример функции, это “вычисление площади треугольника”. Функция как бы говорит: если ты

мне покажешь треугольник, то я тебе скажу его площадь (число). Функция “вычисление площади треуголь-

ника” связывает два типа между собой: тип всех треугольников и тип чисел (значение площади). Могут быть

и не математические функции. Например функция “цвет глаз” говорит нам: если ты покажешь мне челове-

ка, то я скажу какого цвета у него глаза. Эта функция связывает тип “люди” и тип “цвет”. При этом связь

имеет направление. Функция сначала спрашивает у нас, чего ей не хватает, а потом говорит ответ. Ответ

называют значением функции (или выходом функции), а то чего ей не хватает аргументами функции (или

входами). Математики говорят, что эта функция отображает значения типа “люди” в значения типа “цвет”.

В Haskell функции тоже являются значениями. Функция может принимать в качестве аргумента функцию и

возвращать функцию.

Функции бывают чистыми и с побочными эффектами. Чистые функции – это правдивые функции. Их основ-

ная особенность в том, что для одинаковых ответов на их вопросы, они скажут одинаковые ответы. Функции

с побочными эффектами так не делают, например если мы спросим у такой функции какого цвета глаза у

Коли? В один день она может сказать голубые, а в другой зелёные. В Haskell таким функциям не доверяют и

огораживают их от чистых функций, но я увлёкся, обо всём об этом вы узнаете из этой книги.

Благодарности

Я бы хотел поблагодарить родителей за терпение и поддержку, сообщество Haskell, всех тех людей, у

которых я мог свободно учится языку Haskell. Когда я только начинал мне очень помогли книга Мирана

Липовача (Miran Lipovaca) Learn You A Haskell for a Great Good и книга Хал Дама (Hal Daume III) Yet another

Haskell Tutorial. Спасибо Дмитрию Астапову, Дугласу Мак Илрою (Douglas McIlroy) и Джону Хьюзу (John

Huges) за великодушное согласие на использование примеров из их статей. Большое спасибо Кате Столяро-

вой за идею написания книги. Спасибо Александру Мозгунову за расширение моего кругозора в Haskell и не

только. Спасибо Оксане Станевич за редактирование и правки первой главы.