魔力Haskell pdf

图书网 2018年8月23日09:03:03245.1K
摘要

贴近Haskell前沿,兼顾理论和实践的优质参考书
揭秘单子变换、模板编程和泛型编程等特性
解答异常处理、网络编程、数据库操作等方面的常见问题

魔力Haskell 内容简介

本书是一本由浅入深的Haskell教程。书中首先介绍Haskell的基础语法和函数式编程的基本概念,以及GHC、GHCi、Cabal等工具的用法;接着按照函子→应用函子→单子的顺序介绍Haskell中核心的三大类型类,并以列表单子、Reader单子和State单子为例详细分析单子类型类的来龙去脉;后介绍Foldable和Traversable类型类、单子变换、GHC的语言扩展和程序标注,以及网络编程、数据库、并发并行、序列化/反序列化与泛型编程、异常处理等内容。

魔力Haskell 目录

第 一部分 基础知识

第 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

魔力Haskell 精彩文摘

函子是Haskell中最基本的类型类之一。正如所有的抽象始于对相似物体的概括,函子就是这样的抽象的一个概括。例如,列表表示的是一类有多个元素的物体,Maybe表示一类有可能不存在的物体等。我们常常使用“容器”这个概念去理解函子,但这只是帮助我们理解,实际上函子远不止容器这么简单。下面就从函子(functor)开始,进入Haskell的抽象世界。

图书网:魔力Haskell pdf

继续阅读

→→→→→→→→→→→→→→→→→→→→查找获取

程序设计

重构 改善既有代码的设计(中文版)pdf

《重构:改善既有代码的设计》(中文版)所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快你就会把这些重构准则和其名称加入自己的开发词典中,并且朗朗上口...
程序设计

数据结构 C语言版 第2版pdf

适读人群 :普通高校电子信息大类本科生学习、考研,同时也适合零售和培训。 采用“案例驱动”的编写模式。书中结合实际应用,将各章按照“案例引入——数据结构及其操作——案例分析与实现”...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:24   其中:访客  24   博主  0
    • xxv
      xxv 0

      很好的资源

      • marsggg
        marsggg 0

        很好的资源

        • ArchGu
          ArchGu 9

          函数式编程中官推就haskell了

          • ailurophilia
            ailurophilia 9

            很好的资源

            • 123131321
              123131321 9

              不错

              • dsc
                dsc 9

                不错

                • 啦啦啦
                  啦啦啦 9

                  谢谢

                  • 子书
                    子书 9

                    很好的书哎~

                    • Linux
                      Linux 9

                      haskell是好东西,想看想看

                      • test
                        test 9

                        学习一下