用途:这是 fp-ts 技能体系中的基础模块,用于在接触 fp-ts 的 Option、Either、Task 等类型之前,先掌握函数式编程的通用核心概念。资料称这些概念跨语言与库通用。
主要能力:
- 纯函数与引用透明:纯函数要求相同输入得到相同输出且无副作用;引用透明指表达式可被其值替换而不改变程序行为。资料给出将不纯函数改造为纯函数的方式,如返回新数组而非修改原数组、把当前年份等依赖作为参数传入(依赖注入)、用返回效果描述的方式替代直接执行 I/O。
- 柯里化与偏应用:把多参数函数转换为逐次接收单个参数的函数序列,从而通过提供部分参数生成专用函数,如 multiply(2) 得到 double。资料强调参数顺序,推荐数据放最后(data-last),这也是 fp-ts 采用的形式,便于配合 pipe 使用。
- 函数组合:把多个函数组合成新函数,前一个的输出作为后一个的输入。资料介绍 fp-ts/function 中的 pipe(立即用值执行)与 flow(生成可复用函数),并说明组合满足结合律。
- pointfree 风格:定义函数时不显式提及参数,借助 prop、equals、gt 等辅助函数与 flow/pipe 表达转换逻辑,减少噪音、突出计算结构。
使用方式:资料中的示例使用 TypeScript,并引用 fp-ts/function 的 pipe、flow 以及 fp-ts/Array 的 map、filter 等。示例代码展示了如何用 flow 组合小函数构建管道。
适用场景:需要在 TypeScript 中编写可预测、可测试、可组合、易维护且便于并行执行的代码时;作为学习 fp-ts 类型的前置准备。
限制与注意事项:资料提醒常见错误,包括修改参数(如 sort 会改变原数组)、使用 Date、Math.random 等非确定性 API、通过闭包隐藏依赖、参数顺序不一致、过度柯里化、组合类型不兼容的函数、组合多参数函数前未先柯里化,以及过长的管道难以阅读。pointfree 在逻辑复杂时会降低可读性,此时应改用清晰的变量命名。资料未提供安装命令、版本要求或收费信息。