ebook img

Haskell по человечески. PDF

147 Pages·2016·10.595 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Haskell по человечески.

О Haskell по-человечески издание 2.0 ДенисШевченко www.ohaskell.guide 2016 КнигасвободнораспространяетсянаусловияхлицензииCCBY-NC4.0 © ДенисШевченко,2014-2016 Оглавление 1 Приветствую! 9 Почемуэтакнигапоявилась . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Цель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Осебе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Овас . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Обещание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 Первыевопросы 11 «ЧтотакоеэтотвашHaskell?» . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 «Эточто,какой-тоновыйязык?» . . . . . . . . . . . . . . . . . . . . . . . . . 11 «Иктоегосделал?» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 «АбиблиотекидляHaskellимеются?» . . . . . . . . . . . . . . . . . . . . . . 12 «Ичто,егоужеможновproduction?» . . . . . . . . . . . . . . . . . . . . . . 12 «АпорогвхождениявHaskellвысокий?» . . . . . . . . . . . . . . . . . . . . 12 «Аяслышалещёпрокакие-томонады…» . . . . . . . . . . . . . . . . . . . 12 «АеслисравнитьегосC++/Python/Scala…» . . . . . . . . . . . . . . . . . . . 12 3 Обэтойкниге 13 Чегоздесьнет . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Опервомивторомиздании . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Читайтепоследовательно . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Опояснениях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4 Благодарность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Словокчитавшимпервоеиздание . . . . . . . . . . . . . . . . . . . . . . . . 15 4 Приготовимся 17 Устанавливаем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Разворачиваеминфраструктуру . . . . . . . . . . . . . . . . . . . . . . . . . 18 HiWorld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Модули:знакомство . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5 КитыиЧерепаха 22 Черепаха . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 ПервыйКит . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 ВторойКит . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 ТретийКит . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6 Неизменностьичистота 28 Объявляемиопределяем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Чистофункциональный . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 «Присваивание?Не,неслышал…» . . . . . . . . . . . . . . . . . . . . . . . . 30 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 7 Выбираемивозвращаемся 33 Выглянемвовнешниймир . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Выборивыход . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 8 Выбориобразцы 38 Нетолькоиздвух . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 БезЕсли . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Сравнениесобразцом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 9 Пустьбудеттам,Где… 44 Пусть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Где . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Вместе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 10 Мироператоров 49 Зачемэтонужно? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 11 Список 52 Типсписка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Действиянадсписками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Неизменностьсписка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Перечисление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 12 Кортеж 60 Типкортежа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Действиянадкортежами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Невсё . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Аеслиошиблись? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 13 Лямбда-функция 68 Истоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Строение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Типфункции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Локальныефункции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 14 Композицияфункций 75 Скобкам—бой! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Композицияиприменение . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Длинныецепочки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Какработаеткомпозиция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 15 ФВП 82 Отображение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Частичноеприменение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Композициядляотображения . . . . . . . . . . . . . . . . . . . . . . . . . . 88 16 Hackageибиблиотеки 90 Библиотекибольшиеималенькие . . . . . . . . . . . . . . . . . . . . . . . . 90 Hackage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Иерархиявимени. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Лицо . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Импортируемпо-разному . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Оформление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 17 Рекурсия 98 Цикл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Правдаосписке . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Тудаиобратно . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 18 Лень 104 Двемоделивычислений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Какможноменьше . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Рациональность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Бесконечность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Spaceleak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Борьба . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Леньистрогостьвместе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Длялюбопытных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 19 Нашитипы 119 Знакомство . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Значение-пустышка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 20 АТД 123 Извлекаемзначение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Строим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 21 АТД:полясметками 128 Метки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 GetterиSetter?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Безметок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 22 Новыйтип 135 Различия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Зачемоннужен? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 typevsnewtype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 23 Конструктортипа 140 Опциональныйтип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Можетбыть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Этажи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 24 Продолжениеследует… 147 Глава 1 Приветствую! Передвами—книгаоHaskell,удивительномипрекрасномязыкепрограммирова- ния. Почему эта книга появилась Потомучтоменяоткровеннодостало.ПочтивсеизвестныемнекнигиоHaskellна- чинаютсяспримерареализациибыстройсортировкии—кудажбезнеё!—после- довательности Фибоначчи. Эта книга не такая: минимум академизма, максимум практичности. Цель Функциональное программирование — своеобразное гетто посреди мегаполиса нашей индустрии. Доля функциональных языков пока ещё очень мала, и многие разработчики побаиваются знакомства с этими языками, и с Haskell в особенно- сти. Моя цель — разрушить этот страх. Вероятно, вы слышали, что Haskell — это что-тоархисложное,сугубонаучноеинепригодноедляреальнойжизни?Читайте дальше,ивскоревыубедитесьвобратном. О себе Обыкновенный программист-самоучка. Разрабатываю с 2006 года. В 2012 году впервыеуслышалпроHaskell,ужаснулсяипоспешилонёмзабыть.В2013вспом- нилопять,в2014увлёксявсерьёз,ав2015,после8летжизнисC++,окончательно перешёл в Haskell-мир. Также я положил начало русскоязычному сообществу Haskell-разработчиков. И да, я действительно использую этот язык в своей каждодневнойработе. 9 Глава1. Приветствую! 10 О вас Знаете, что такое компилятор? Не боитесь командной строки? Слышали слово «функция»? Если да — смело продолжайте читать, никаких дополнительных навыков от вас не ожидается. И какой-либо математической подготовки — тоже. Обещание Возможно,выпоушивлюбитесьвHaskell.Возможно,онвызоветувасотвращение. Обещаюодно—скучнонебудет.Начнём.

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.