Приветствую всех Хабражителей!
Представляю вашему вниманию книгу о языке Haskell. Впрочем, «книга» — это громко сказано: 160-страничное руководство для обыкновенных программистов, которые хотят наконец понять, как же можно жить без оператора присваивания и что такое монада.
Озвучу причины, с чего это вдруг мне, самому заурядному C++-разработчику, взбрело в голову написать про Haskell.
Причина первая: любовь со второго взгляда
Ничего примечательного о себе сообщить не могу. 7 лет опыта разработки на C++, год на Objective-C. Впервые услышал о Haskell случайно: у коллеги на столе лежала книга на английском языке «Programming in Haskell». Спросил. Услышав об отсутствии оператора присваивания, сначала не поверил своим ушам, а потом поспешил забыть про этот «функциональный ужас».
Второй взгляд на Haskell был уже более пристальным. Я решил разобраться, как же можно написать что-то на таком языке. Начал пробовать, разбираться. И потом понял, что это моё. Не знаю почему, но зацепило меня, и зацепило крепко. Может, сказались годы программирования на C++, не знаю… Уставать я начал от сложности C++, потому и Objective-C понравился мне сразу, потому и в Haskell влюбился по уши.
Причина вторая: эксперимент
Ни в школе, ни в ВУЗе я не любил математику и, как следствие, был в ней откровенно слаб. А вокруг Haskell, имеющего давние математические корни, сформировался стойкий стереотип: этот язык — для выпускников МФТИ, не ниже. И я подумал: «Если этот стереотип верен, то у такого как я нет ни малейших шансов освоить Haskell. Ну а уж если я смогу — значит другие тоже смогут». И я решил попробовать. Попробовал. Скажу одно: стереотип этот — ложь.
Причина третья: достало!
При всём моём уважении к авторам русскоязычных трудов по Haskell, большинство из них не годятся для новичков. Открываю — а там про быструю сортировку и факториал. Да не знаю я что это такое! И не хочу знать, потому что мне в моей работе не приходится иметь с этим дело. На пятой странице — про интегрируемость по Лебегу, на двадцатой — про моноид в моноидальной категории эндофункторов. А из самых первых примеров кода вижу что-то наподобие этого:
unfoldr (b -> fmap (const . (second $ drop 1) . break (==' ') $ b) . listToMaybe $ b)
Простите, что это?..
Я решил руководствоваться мудрым афоризмом Альберта Эйнштейна: «Если вы не можете объяснить свою теорию шестилетнему ребёнку, значит вы и сами её не понимаете.» Именно поэтому решил написать так, чтобы понятно было любому.
Причина последняя: вклад
Недавно мне исполнилось 33. Пора уже не только брать от сообщества, но и что-то отдать ему. Я кое-что понял о Haskell, и хочу теперь поделиться этим со всеми моими коллегами. Штука-то ведь и вправду сильная оказалась…
Что в книге?
Основы основ. От cabal до Hackage, от чистых функций до списков, от пользовательских типов до обработки исключений, от функций высшего порядка до функторов.
Что будет дальше?
Дальше будет развитие. Планирую добавить главы о таких интересных вещах, как монадные трансформеры, аппликативные функторы, построение DSEL, многопоточность. Да, информации обо всём об этом достаточно много, но, во-первых, она разбросана по бескрайним просторам Сети, а во-вторых, представлена преимущественно на английском языке. А читать на родном всё-таки приятнее…
Собственно, вот книга: ohaskell.ru. Выпущена на CC-лицензии, так что распространение всячески приветствуется.
Благодарности
Благодарю авторов книг «Real word Haskell» и книги со слоном («Изучай Хаскел во имя добра»). Из этих книг я понял, что Haskell пригоден далеко не только для факториала. Благодарю Антона Холомьёва, автора учебника по Haskell. Также благодарю авторов многочисленных блогов, исследование которых помогло мне понять, что же такое эти монады и с чем едят частичное применение функции.
Отзывы, пожелания и разгромную критику приму с радостью.
Автор: denisshevchenko