《魔力Haskell》是2016年9月人民郵電出版社出版的圖書,作者是韓冬。
基本介紹
- 中文名:魔力Haskell
- 出版時間:2016年9月
- 出版社:人民郵電出版社
- 頁數:354 頁
- ISBN:9787115432834
- 定價:79 元
- 開本:16 開
- 裝幀:平裝
內容簡介,圖書目錄,
內容簡介
本書是一本由淺入深的Haskell教程。書中首先介紹Haskell的基礎語法和函式式編程的基本概念,以及GHC、GHCi、Cabal等工具的用法;接著按照函子→套用函子→單子的順序介紹Haskell中核心的三大類型類,並以列表單子、Reader單子和State單子為例詳細分析單子類型類的來龍去脈;後介紹Foldable和Traversable類型類、單子變換、GHC的語言擴展和程式標註,以及網路編程、資料庫、並發並行、序列化/反序列化與泛型編程、異常處理等內容。
圖書目錄
第 一部分 基礎知識
第 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