互动摘要 | 核心概念翻转卡片 | 事实与观点
本章确立了全书的基础:FP 是关于使用纯函数构建程序。
通过消除副作用,我们获得了模块化,使程序更容易测试、复用、并行化和推理。
介绍了 Scala 语言基础以及如何编写循环和高阶函数。
讨论了不可变数据结构(如 List, Tree)的定义和操作。
异常破坏了引用透明性。本章引入了将错误作为值返回的概念。
介绍了非严格求值(惰性求值)以及如何利用它提高效率和模块化。
如何在该没有副作用的情况下处理状态变更(如随机数生成)。
通过设计一个并行库(Par)来展示函数式库的设计过程。
设计一个库来自动验证程序是否满足特定属性(Property)。
构建一个用于文本解析的库。通过组合小的解析器来构建复杂的解析器。
介绍纯代数结构。Monoid 是最简单的结构之一。
统一了之前的 Parser, Gen, Par, Option, State 等模式。Monad 是比 Applicative 更强大的抽象。
Applicative 比 Monad 弱(更通用),Traversable 允许在保留结构的同时处理副作用。
如何纯粹地处理外部世界。区分了“副作用 (Side Effect)”与“作用 (Effect)”。
如果副作用对外不可见,那么它就是纯的。本章引入了 ST Monad 来处理局部可变状态。
解决 IO Monad 无法高效、组合式地处理大数据流的问题。