1
成员
168 文章
本书是一本由浅入深的Haskell 教程。书中首先介绍Haskell 的基础语法和函数式编程的基本概念,以及GHC、GHCi、cabal 等工具的用法;接着按照函子→应用函子→单子的顺序介绍Haskell 中核心的三大类型类,并以列表单子、Reader 单子和State 单子为例详细分析单子类型类的来龙去脉;最后介绍Foldable和Traversable 类型类、单子变换、GHC 的语言扩展和程序标注,以及网络编程、数据库、并发和并行、序列化/反序列化与泛型编程、异常处理等内容。
不管你是刚刚开始学习编程的计算机爱好者,或是有一定编程经验的从业人员,还是对函数式编程已经有一些了解但希望进一步提高的进阶读者,在本书中都能找到你想要的内容。

第一部分 基础知识

第1章 基本语法和GHCi

  • 1.1 注释 
  • 1.2 表达式
  • 1.3 声明
  • 1.4 函数
  • 1.5 GHCi
  • 1.6 初级函数

第2章 data和模式匹配

  • 2.1 数据声明data
  • 2.2 模式匹配
  • 2.3 各式各样的数据类型
  • 2.4 排版规则

第3章 列表、递归和盒子比喻

  • 3.1 列表
  • 3.2 递归操作
  • 3.3 盒子比喻

第4章 元组、类型推断和高阶函数

  • 4.1 元组 
  • 4.2 类型推断
  • 4.3 高阶函数

第5章 常用的高阶函数和函数的补充语法

  • 5.3 组合函数
  • 5.4 函数的补充语法
  • 5.6 黑魔法词汇表

第6章 常用的列表操作:映射、过滤、 折叠和扫描

  • 6.1 映射
  • 6.2 过滤 
  • 6.3 折叠
  • 6.4 扫描
  • 6.5 方向是相对的

第7章 类型类

  • 7.1 实例声明
  • 7.2 类声明
  • 7.3 类型类的实现 

第8章 数字相关的类型类

  • 8.1 顺序类
  • 8.2 data和类型约束
  • 8.3 枚举类
  • 8.4 边界类
  • 8.5 数字类

第9章 type、newtype和惰性求值

  • 9.1 类型别名type
  • 9.2 新类型声明newtype 
  • 9.3 惰性求值 

第10章 模块语法以及cabal、Haddock 工具

  • 10.1 模块语法
  • 10.2 使用cabal
  • 10.3 Haddock

第二部分 重要的类型和类型类

第13章 应用函子

  • 13.1 函子的局限
  • 13.2 什么是函子
  • 13.3 IO应用函子

第14章 单位半群和一些有趣的应用函子

  • 14.1 单位半群
  • 14.2 当单位半群遇上应用函子

第15章 解析器

  • 15.1 参数解析
  • 15.2 optparse-applicative 
  • 15.3 选择解析

第16章 单子

  • 16.1 应用函子的局限
  • 16.2 什么是单子
  • 16.3 IO单子

第17章 八皇后问题和列表单子

  • 17.1 列表单子与数组归纳
  • 17.2 八皇后问题 
  • 17.3 MonadPlus 
  • 17.4 结构控制函数

第18章 Reader单子

  • 18.1 (->)a的单子实例声明
  • 18.2 模板渲染 
  • 18.3 Reader新类型 

18.1 (->)a的单子实例声明

第19章 State单子

  • 19.1 什么是State单子 
  • 19.2 随机数
  • 19.3 简易计算器 

第20章 IO和它的伙伴们

  • 20.1 IO单子的本质
  • 20.2 基本IO操作
  • 20.3 IO中的变量
  • 20.4 forkIO
  • 20.5 ST单子
  • 20.6 后门函数

第三部分 高级类型类和项目实践

第21章 语言扩展和程序标注 

  • 21.1 语言扩展
  • 21.2 严格求值数据项
  • 21.3 惰性模式 
  • 21.4 程序标注
  • 21.5 编译选项
  • 21.6 运行分析

第22章 Foldable和Traversable 

  • 22.1 Foldable
  • 22.2 折叠与单位半群
  • 22.3 Traversable 
  • 22.4 推导规则
  • 22.5 Data.Coerce

第23章 列表、数组和散列表

  • 23.1 列表
  • 23.2 数组
  • 23.3 散列表

第24章 单子变换 

  • 24.1 Kleisli范畴
  • 24.2 ReaderT 
  • 24.3 Identity和IdentityT 
  • 24.4 StateT 
  • 24.5 RandT 

第25章 单子变换的升格操作

  • 25.1 MonadIO 
  • 25.2 MonadState和MonadReader
  • 25.3 类型家族 
  • 25.4 Lazy StateT和Strict StateT
  • 25.5 Writer单子 

第26章 高效字符串处理 

  • 26.1 bytestring函数库
  • 26.2 text和utf8-string函数库
  • 26.3 mono-traversable函数库

第27章 网络编程 

  • 27.1 wai/warp 
  • 27.2 wai-extra  
  • 27.3 HTTP的单子抽象
  • 27.4 WebSocket编程
  • 27.5 Socket编程 

第28章 Haskell与数据库

  • 28.1 persistent
  • 28.2 esqueleto

第29章 模板编程

第29章 模板编程

  • 29.1 什么是模板
  • 29.2 Q单子
  • 29.3 拼接
  • 29.4 reify

第30章 并发和并行编程

  • 30.1 运行时工作原理
  • 30.2 并行编程
  • 30.3 并发编程

第31章 高级类型编程

  • 31.1 Typeable和Dynamic
  • 31.2 存在类型
  • 31.3 类型家族、数据家族和GADT
  • 31.4 数据类别DataKinds

第32章 序列化/反序列化与泛型编程

  • 32.1 aeson函数库
  • 32.2 泛型

第33章 Haskell中的异常处理

  • 33.1 使用Either/Maybe表示异常
  • 33.2 运行时异常
  • 33.3 纯函数中的异常处理
  • 33.4 异常和单子变换
  • 33.5 常见的异常处理问题