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

Липовача Миран

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

Язык Haskell имеет множество впечатляющих возможностей, но главное его свойство в том, что меняется не только способ написания кода, но и сам способ размышления о проблемах и возможных решениях. Этим Haskell действительно отличается от большинства языков программирования. С его помощью мир можно представить и описать нестандартным образом. И поскольку Haskell предлагает совершенно новые способы размышления о проблемах, изучение этого языка может изменить и стиль программирования на всех прочих.

Ещё одно необычное свойство Haskell состоит в том, что в этом языке придаётся особое значение рассуждениям о типах данных. Как следствие, вы помещаете больше внимания и меньше кода в ваши программы.

Вне зависимости от того, в каком направлении вы намерены двигаться, путешествуя в мире программирования, небольшой заход в страну Haskell себя оправдает. А если вы решите там остаться, то наверняка найдёте чем заняться и чему поучиться!

Эта книга поможет многим читателям найти свой путь к Haskell.

Отображения, монады, моноиды и другое!

Всё сказано в названии: «Изучай Хаскель во имя добра!» – весёлый иллюстрированный самоучитель по этому сложному функциональному языку.

С помощью оригинальных рисунков автора, отсылке к поп-культуре, и, самое главное, благодаря полезным примерам кода, эта книга обучает основам функционального программирования так, как вы никогда не смогли бы себе представить.

Вы начнете изучение с простого материала: основы синтаксиса, рекурсия, типы и классы типов. Затем, когда вы преуспеете в основах, начнется настоящий мастер-класс от профессионала: вы изучите, как использовать аппликативные функторы, монады, застежки, и другие легендарные конструкции Хаскеля, о которых вы читали только в сказках.

Продираясь сквозь образные (и порой безумные) примеры автора, вы научитесь:

• Смеяться в лицо побочным эффектам, поскольку вы овладеете техниками чистого функционального программирования.

• Использовать волшебство «ленивости» Хаскеля для игры с бесконечными наборами данных.

• Организовывать свои программы, создавая собственные типы, классы типов и модули.

• Использовать элегантную систему ввода-вывода Хаскеля, чтобы делиться гениальностью ваших программ с окружающим миром.

Нет лучшего способа изучить этот мощный язык, чем чтение «Изучай Хаскель во имя добра!», кроме, разве что, поедания мозга его создателей.

Миран Липовача (Miran Lipovača) изучает информатику в Любляне (Словения). Помимо его любви к Хаскелю, ему нравится заниматься боксом, играть на бас-гитаре и, конечно же, рисовать. У него есть увлечение танцующими скелетами и числом 71, а когда он проходит через автоматические двери, он притворяется, что на самом деле открывает их силой своей мысли.

От издателя

Эта книга начиналась как англоязычный онлайновый учебник по языку Haskell, написанный словенским студентом, изучающим информатику, Мираном Липовачей (Miran Lipovača) в 2008 году. В мае 2009 года на сайте translated.by пользователь Дмитрий Леушин предложил первые главы учебника для перевода на русский язык. Его инициативу подхватил Александр Синицын. В переводе также принимали участие Виталий Капустян, Иван Терёхин, Дмитрий Крылов, пользователи olegchir, artobstrel95, Julia и другие. Оригинальный учебник оказался настолько популярным, что в 2011 году он был издан в печатном виде. Текст онлайнового издания при подготовке печатного издания был серьёзно исправлен и улучшен. Последние пять глав учебника переводились уже по печатному изданию Ясиром Арсанукаевым. Готовый текст был отредактирован Романом Душкиным. На втором этапе редактированием занимался Виталий Брагилевский; он также привёл текст первых десяти глав книги в соответствие с англоязычным печатным изданием и переработал текст раздела «Исключения». Оформление, вёрстка и другие технические работы выполнялись сотрудниками издательства «ДМК Пресс».

Предисловие

Когда в начале 2006 года я садился за свою первую книгу по функциональному программированию [2], в которой намеревался проиллюстрировать все теоретические положения при помощи языка Haskell, у меня возникали некоторые сомнения на сей счёт. Да, за плечами уже был пятилетний опыт чтения потоковых лекций по функциональному программированию в Московском Инженерно-Физическом Институте (МИФИ), для которых я и ввёл в учебный процесс этот замечательный язык вместо использовавшегося прежде языка Lisp. Однако в качестве методической основы тогда ещё не было практически ничего, кроме формального описания языка и нескольких статей. Существовало, впрочем, несколько книг о Haskell на английском языке [3, 4, 5, 7], но в те времена достать их было несколько затруднительно. Тем не менее я выбрал именно этот язык, поскольку создавать очередной том о функциональном программировании на Lisp (на каком-либо из его многочисленных диалектов) было бы нецелесообразно – такие книги имелись в избытке.

Сегодня можно уверенно сказать, что тогда я не ошибся в своём выборе. Развитие языка шло темпами набирающего скорость локомотива. Появлялись компиляторы (в том числе и полноценная среда разработки Haskell Platform), разно образные утилиты для помощи в разработке, обширнейший набор библиотек, а главное – сложилось сообщество программистов! За несколько лет язык приобрёл огромное количество почитателей, в том числе русско язычных. Притом возник так называемый эффект «петли положительной обратной связи»: стремительно растущее сообщество стало ещё активнее развивать язык и всё, что с ним связано. И вот уже количество библиотек для Haskell насчитывает не одну тысячу, охватывая всевозможные задачи, встречающиеся в повседневном процессе коммерческой разработки. Выходят новые книги, одна из которых [6] буквально взрывает общественное мнение. Теперь Haskell уже не воспринимается в качестве языка «нёрдов», получая статус вполне респектабельного средства программирования. На русском языке начинают выходить многочисленные переводы статей по Haskell (в том числе и официальные), основывается первый журнал, посвящённый функциональному программированию – «Практика функционального программирования» (ISSN 2075-8456).

И вот сегодня вы, уважаемый читатель, держите в руках переводное издание новой интересной книги о языке Haskell и основах реального программирования на нём. Эта публикация опять же стала возможной благодаря деятельности профессионального сообщества. Группа инициативных любителей языка Haskell перевела значительную часть текста, после чего издательством «ДМК Пресс», которое уже становится флагманом в деле издания книг о функциональном программировании в России, был проведён весь комплекс предпечатных работ – научное редактирование, корректура, вёрстка.

Миран Липовача – автор из Словении, который написал свою книгу «Изучай Haskell во имя добра», с тем чтобы сделать процесс освоения Haskell лёгким и весёлым. Оригинал книги, опубликованный в сети Интернет, написан в весьма вольном стиле – автор позволяет себе многочисленные жаргонизмы и простое (даже, можно сказать, простецкое) обращение с читателем. Текст дополнен многочисленными авторскими рисунками, предназначенными исключительно для развлечения читателя и не несущими особой смысловой нагрузки. Поначалу всё это заставляет предположить, что книга «несерьёзная», однако это впечатление обманчиво. Здесь представлено очень хорошее описание как базовых принципов программирования на Haskell, так и серьёзных идиом языка, пришедших из теории категорий (функторы, аппликативные функторы, монады). Притом автор пользуется очень простым языком и приводит доступные для понимания примеры. Вообще, книга насыщена разнообразными примерами, и это её положительная черта.

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