魔力Haskell

韓冬

立即出貨 (庫存=1)

買這商品的人也買了...

相關主題

商品描述

本書是一本由淺入深的Haskell教程。書中首先介紹Haskell的基礎語法和函數式編程的基本概念,以及GHC、GHCi、Cabal等工具的用法;接著按照函子→應用函子→單子的順序介紹Haskell中核心的三大類型類,並以列表單子、Reader單子和State單子為例詳細分析單子類型類的來龍去脈;後介紹Foldable和Traversable類型類、單子變換、GHC的語言擴展和程序標註,以及網絡編程、數據庫、並發並行、序列化/反序列化與泛型編程、異常處理等內容。

作者簡介

韓冬,北京理工大學07級畢業生,畢業後從事嵌入式開發,後投身互聯網行業,曾任職百度、美團網高級前端工程師,現在在滴滴出行平台架構組從事架構開發工作。在工作中實踐函數式編程,經驗豐富。

目錄大綱

第一部分基礎知識
第1章基本語法和GHCi 3 
1.1註釋3 
1.2表達式3 
1.3聲明4 
1.3.1類型聲明和綁定聲明4 
1.3.2模塊聲明和導入聲明5 
1.4函數6 
1.5 GHCi 8 
1.6初級函數10 

第2章data和模式匹配13 
2.1數據聲明data 13 
2.2模式匹配14 
2.2.1無處不在的模式匹配15 
2.2.2 @pattern 16 
2.3各式各樣的數據類型16 
2.3.1多構造函數16 
2.3.2完備性檢查17 
2.3.3無參數構造函數18 
2.3.4 data與類型變量18 
2.3.5記錄語法20 
2.4排版規則22 

第3章列表、遞歸和盒子比喻23 
3.1列表23 
3.1.1等差數列24 
3.1.2匹配列表24 
3.2遞歸操作26 
3.3盒子比喻30 

第4章元組、類型推斷和高階函數34
4.1元組34 
4.2類型推斷35 
4.3高階函數37 
4.3.1拉鍊和zipWith 39 
4.3.2柯里化41 

第5章常用的高階函數和函數的補充
語法43 
5.1應用函數$和& 43 
5.2匿名函數44 
5.3組合函數. 45 
5.4函數的補充語法46 
5.4.1 where 46 
5.4.2 guard 47 
5.4.3 MultiWayIf 49 
5.4.4 where與let 49 
5.5 Point free 49 
5.6黑魔法詞彙表51
 
第6章常用的列表操作:映射、過濾、
折疊和掃描53 
6.1映射53 
6.2過濾54 
6.3折疊55 
6.4掃描57 
6.5方向是相對的60 

第7章類型類62 
7.1實例聲明62 
7.2類聲明65 
7.3類型類的實現66 
7.3 .1層級和約束67 
7.3.2推導類型類68 
7.3.3 Show/Read 69 

第8章數字相關的類型類71
8.1順序類71 
8.2 data和類型約束72 
8.3枚舉類73 
8.4邊界類75 
8.5數字類76 

第9章type、newtype和惰性求值80 
9.1類型別名type 80 
9.2新類型聲明newtype 81 
9.3惰性求值84 
9.3.1標記語義、常態和弱常態87 
9.3.2 seq和deepseq 90 

第10章模塊語法以及cabal、Haddock 
工具94 
10.1模塊語法94 
10.2使用cabal 96 
10.2.1使用cabal安裝依賴96 
10.2.2項目的cabal配置98 
10.3 Haddock 101 

第二部分重要的類型和類型類
第11章函子107 
11.1容器抽象107 
11.2範疇110 
11.3 Identity和Const 115 
11.4 IO函子117 

第12章透鏡組118 
12.1 getter和setter 118 
12.2透鏡組120 
12.3 view、set和over函數122 
12.3.1 over函數122
12.3.2 set函數124 
12.3.3 view函數125 
12.4函數庫128 

第13章應用函子129 
13.1函子的局限129 
13.2什麼是函子133 
13.2.1 Reader應用函子134 
13.2.2自然升格135 
13.3 IO應用函子138 

第14章單位半群和一些有趣的應用
函子139 
14.1單位半群139 
14.1.1 Endo單位半群141 
14.1.2自由單位半群142 
14.1.3逆144 
14.2當單位半群遇上應用函子145 
14.2.1 Const a的應用函子實例145 
14.2.2選擇應用函子146 
14.2.3拉鍊應用函子147 

第15章解析器149 
15.1參數解析149 
15.2 optparse-applicative 151 
15.3選擇解析153 

第16章單子158 
16.1應用函子的局限158 
16.2什麼是單子159 
16.2.1粘合函數161 
16.2.2 do語法糖163 
16.3 IO單子165

第17章八皇后問題和列表單子168 
17.1列表單子與數組歸納168 
17.2八皇后問題169 
17.3 MonadPlus 171 
17.4結構控制函數173 
17.4.1 sequence/sequence_ 173 
17.4.2 mapM/mapM_ 174 
17.4.3 replicateM/replicateM_ 175 
17.4.4 forever 176 
17.4.5 filterM 176 
17.4.6 foldM/foldM_ 177 

第18章Reader單子179 
18.1 (->)a的單子實例聲明179 
18.2模板渲染180 
18.3 Reader新類型185 

第19章State單子187 
19.1什麼是State單子187 
19.2隨機數192 
19.3簡易計算器195 

第20章IO和它的伙伴們197 
20.1 IO單子的本質197 
20.2基本IO操作199 
20.3 IO中的變量202 
20.4 forkIO 203 
20.5 ST單子204 
20.6後門函數206 

第三部分高級類型類和項目實踐
第21章語言擴展和程序標註211 
21.1語言擴展211 
21.2嚴格求值數據項214 
21.3惰性模式214 
21.4程序標註215 
21.5編譯選項217 
21.6運行分析218 

第22章Foldable和Traversable 221 
22.1 Foldable 221 
22.2折疊與單位半群224 
22.3 Traversable 226 
22.4推導規則230 
22.5 Data.Coerce 231 

第23章列表、數組和散列表233 
23.1列表233 
23.2數組236 
23.3散列表242 

第24章單子變換245 
24.1 Kleisli範疇245 
24.2 ReaderT 246 
24.3 Identity和IdentityT 248 
24.4 StateT 250 
24.5 RandT 253 

第25章單子變換的升格操作256 
25.1 MonadIO 258 
25.2 MonadState和MonadReader 258 
25.3類型家族260
25.4 Lazy StateT和Strict StateT 262 
25.5 Writer單子263 

第26章高效字符串處理266 
26.1 bytestring函數庫266 
26.1.1 Lazy ByteString 267 
26.1.2 ByteString Builder 268 
26.2 text和utf8-string函數庫272 
26.3 mono-traversable函數庫274 

第27章網絡編程276 
27.1 wai/warp 276 
27.2 wai-extra 279 
27.3 http的單子抽象280 
27.4 WebSocket編程281 
27.5 Socket編程283 

第28章Haskell與數據庫286 
28.1 persistent 286 
28.2 esqueleto 292 

第29章模板編程296 
29.1什麼是模板296 
29.2 Q單子299 
29.3拼接301 
29.4 reify 303 

第30章並發和並行編程306 
30.1運行時工作原理306 
30.2並行編程308 
30.3並發編程310
30.3.1 MVar 311 
30.3.2 STM 314 
30.3.3 aysnc 316 

第31章高級類型編程317 
31.1 Typeable和Dynamic 317 
31.2存在類型320 
31.3類型家族、數據家族和GADT 321 
31.3.1類型家族321 
31.3.2數據家族324 
31.3.3 GADT 325 
31.4數據類別DataKinds 327 

第32章序列化/反序列化與泛型編程331 
32.1 aeson函數庫331 
32.1.1使用模板編程自動生成ToJSON/FromJSON實例334 
32.1.2使用泛型提供的ToJSON/FromJSON 335 
32.2泛型336 

第33章Haskell中的異常處理342 
33.1使用Either/Maybe表示異常342 
33.2運行時異常343 
33.2.1異步異常346 
33.2.2資源的清理和釋放348 
33.3純函數中的異常處理349 
33.4異常和單子變換350 
33.4.1 exceptions 350 
33.4.2 monad-control 351
33.5 常見的異常處理問題353