Graham Hutton,Haskell编程,第二版,2016年

应用程序剑桥大学出版社любезнопредоставиломневтороиизданиеучебникаГрэхемаХатто。 Сейчася,готовяськновомусеместру,егопрочитал。

Этодействительноучебникдляначинающих,ябыхарактеризовалегокакпособиедлястудентовмладшихкурсов,которыеещёнезадаютсявопросомотом,сколькоимначнутплатитьзаприменениеполученныхврезультатеизучениязнаний。 Потомучтоприменитьэтизнаниясрезусовершенноточнонеудастся:ниоднуболееилименеереальне Впрочем,такаязадачаавторомявнонеставится,многиевакадемиисчитаютеёчем-топостыдным,поэтомуотизвестногопрофессораждатьчего-тотакогоинестоит。

Годназадянеобратилнаэтукнигусерьёзноевнимание,посколькутогдачиталкурсХаскелячетверокурсникам,аониужеслишкомбольшие,чтобыснимиэтопроходило。 Сейчасжеявпроцессепереводакурсасчетвёртогогодаобучениянавторойидвукратногосокращения,итутвдругвыяснилось,чтокнижкаоченьхорошая。

Первоеизданиевышлов2007годуибылоужасным,вовторомжеавторуудалосьисправитьвсеметодическиеисмысловыеошибки,многоебылообновленоигораздологичнеепредставлено。 Вкниге304страницыи17глав,разбитыхнадвечасти:«Основныеконцепции»и«Двигаясьдальше» – разбиениеоченьточное,особенновмоейситуации8недельногокурса。

Впервыхдвухгла​​вахавторвводитчитателявосновныеидеиисоставляющиефункциональногостиляпрограммированияиязыкаHaskell中,атакжедаётпервыепримерыкода(дляисполнениявинтерпретатореGHCI – тамжеон,кстати,остаётсядоконца)。 Третьяглаваназывается«Типыиклассы»,внейдовольномноговсего:отбазовыхтиповкспискамикортежам,функциональныетипыиидеякаррирования,полиморфизмиперегрузка,идеяипростыепримерыклассовтипов。 Всёэтоукладываетсяв15страництекста,накоторыхпроявляетсяфирменныйстильавтора:объясненияоченьчёткие,короткие,новполнедостаточныедляпоследующего。 Хаттонумеетсебяограничивать,новсегдааккуратнорасставляетссылкидляжелающиеоеолиние

Следующиепятьглав,счетвёртойповосьмую,составляютосновноесодержаниепервойчастииотражаютпредставленияавтораобазовомХаскеле,представлениянемногоспорные,нозаслуживающиеуважения。 Итак,это:способыопределенияфункций(глава4),списковаянотация(列表解析,глава5),рекурсивноеопределениефункций(глава6),функциивысшегопорядка(глава7)и,наконец,определениесобственныхтиповиклассовтипов(глава8 )。 Ещёоднасоставляющаяфирменногостиля:демонстрациявводимыхпонятийнакрасивыхпримерах,«функциональныхжемчужинах»,сначалапростых,апотомвсёболеезаковыристых。 ТутишифрЦезаря(совзломомнаосновеанализачастот!),икодированиестрокдляпередачипоканалу(непомехоустойчивое!),исистемаголосования,наконец,проверкатавтологийиабстрактнаямашинадлявычислениязначенияарифметическихвыражений。 Вобщем,чудесныеакадемическиезадачки,хотяисовершеннобесполезныевжизни。 Впрочем,вэтихзадачахестьочёмподумать(книмприлагаетсямногохорошихупражнений,втомчислеидовольносложных),подобраныониудачно,ииллюстрируютвсё,чтотребуется。

Перваячастьзавершаетсядевятойглавойсрасширеннымпримером – 倒计时问题 – любимойфункциональщикамизадачейпостроенияарифметическихвыраженийпозаданномунаборучисловыхконстантитребуемомузначению。 Интересно,нонепонятно,кактакоеиспользоватьвлекционномкурсе。 Боюсь,чтоникак,этоможнотолькочитать,задумываясьнадкаждойстрочкой。

Втораячастьнемногимдлиннеепервой(140страницпротив120-ти)。 Тутунаспростейшийввод-вывод(Виселица,Ним,Жизнь – !классика),крестики-нолики(споискомвыигрышнойстратегиипометодуминимакса),функторы-аппликативы-монады(всего26страницнавсё – идеальныйразмер,ничеголишнегои, разумеется,безглупыхшуток),монадическийразбортекста(парсер-комбинаторы),моноиды–Foldable–Traversable,л。 СобственноHaskell的наэтомзаканчивается,последниедвеглавыпосвященыформальнымрассуждениямипреобразованиюфункциональныхпрограмми«вычислениюкомпиляторов»посвежейстатьеавтора(2015года)。

Вприложенияхрешенияизбранныхисводкафункцийстандартнойбиблиотеки(комуэтовоон)

ВосторженноепредисловиеккнигенаписалЭрикМейер(нутот,которомусильноненравитсяразвитиеGHCикоторыйгрозилсяперейтивсвоёмкурсефункциональногопрограммированияна拥抱),большевсегоемупонравилисьпоследниеглавы,«близкиепотематикекегодиссертации»。

Итак:содержаниекнигиоченьбазовое,безизлишеств,нодостаточноактуальное(ксерединекнигиавторчестнопризнаётся,чтопрофункциинаспискахпоначалуврал); примерыкрасивыеиинтересные,нонеслишком(совсемне)практичные; упражненияполезные; списоклитературыобъёмныйитожеполезный(AстоссылканакнижкуAwodeyпотеориикатегорий!)。 Книгарекомендуетсядляиспользованияприначальномобучениифункциональномупрограммированиюиязыку的Haskell(втомчислеисамостоятельно),пройтивсёможномесяцазадва-три。

PSПрошупрощениязаМейера,он,разумеется,оченьхорош,новпотэпохальномспоренесовсемправ。