haskell-notes

Тематический сборник . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

И все-все-все . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

Обзор Hackage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Стандартные библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Эффективные типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Разработка программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

И все-все-все . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Места . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

Университеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

Компании . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

10

Предисловие

История языка Haskell начинается в 1987 году. В 1980е годы наблюдался всплеск интереса к ленивой

стратегии вычислений. Один за другим появлялись новые функциональные языки программирования. Про-

граммисты задумались и решили, объединив усилия, найти общий язык. Так появился Haskell. Он был назван

в честь одного из основателей комбинаторной логики Хаскеля Кэрри (Haskell Curry).

Новый язык должен был стать свободным языком, пригодным для исследовательской деятельности и

решения практических задач. Свободные языки основаны на стандарте, который формулируется комите-

том разработчиков. Дальше любой желающий может заняться реализацией стандарта, написать компилятор

языка. Первая версия стандарта была опубликована 1 апреля 1990 года. Haskell продолжает развиваться

и сегодня, было зафиксировано два стандарта: 1998 и 2010 года. Это стабильные версии. Но кроме них в

Haskell включается множество расширений, проходит обкат интересных идей. Сегодня Haskell переживает

бурный рост, к сожалению, эпицентры далеки от России, это Англия, Нидерланды, Америка и Австралия. Ин-

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

подходит для распараллеливания. И сейчас проводятся исследования в этой области.

Haskell очень красивый и лаконичный язык. Он придётся по душе математикам, программистам, склон-

ным к поиску элегантных решений. В арсенале программиста: строгая типизация с выводом типов, функции

высшего порядка, алгебраические типы данных, алгебраические структуры. Если пока всё это звучит как

набор слов, ничего страшного, вы узнаете что это по ходу чтения книги.

Структура книги

Haskell славится высоким порогом вхождения. Он считается трудным языком для начинающих. Во многом

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

И при первом знакомстве оказывается, что этот опыт ничем не может им помочь. Они не могут найти в Haskell

аналогов привычных синтаксических конструкций и приёмов программирования. Haskell сильно отличается

от распространённых языков программирования. Но если вы совсем-совсем начинающий, скорее всего в этом

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

с открытым сердцем. Не ищите в Haskell элементы вашего любимого языка и, возможно, таким языком станет

Haskell.

Ещё одна трудность связана с тем, что многие понятия тесно переплетены, Haskell не так просто разбить

на маленькие части и изучать их от простого к сложному, уже в самых простейших элементах кроются черты

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

Haskell по кусочкам, а окунёмся в него с головой, уже в первой главе мы пробежимся по всему языку и далее

будем углубляться в отдельные моменты.

В книге много примеров. Haskell оснащён интерпретатором. Интерпретатор (также называемый REPL, от

англ. read-eval-print loop) позволяет писать программы в диалоговом режиме. Мы набираем выражение языка

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

языка. Мы будем обращаться к нему очень часто.

Книгу можно разбить на несколько частей:

• Основы языка (1-13). Из первых тринадцати глав вы узнаете, что такое Haskell и чем он хорош.

• Теоретическая часть (14-16). Haskell питается соками математики, многие красивые научные идеи не

только находят в нём воплощение, но и являются фундаментом языка. Из этих глав вы узнаете немного

теории, которая служила источником вдохновения разработчиков Haskell.

• Разработка на Haskell (10,17-20). В этих главах мы познакомимся с расширениями языка (17), мы узна-

ем как писать библиотеки и документацию (18), проводить тестирование и оценивать быстродействие

программ (19), также мы потренируемся в написании императивного кода на Haskell (20). Из главы 10

мы узнаем как работает GHC, основной компилятор для Haskell.

Предисловие | 11

• Примеры (13, 21). В этих главах мы посмотрим на несколько примеров применения Haskell. В глваве

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162