融入单子与范畴论
该议题讨论将单子(Monads)和范畴论(Category Theory)概念纳入 Promises/A+ 规范的可能性,旨在通过函数式编程的理论基础来完善 Promise 的行为定义,提升其组合性和可预测性。
背景速读
- 这个 GitHub issue 讨论的是 JavaScript 的 Promise 规范(Promises/A+),核心争议在于:Promise 是否应该明确基于**单子(Monad)**和**范畴论(Category Theory)**来设计。
- 单子是函数式编程中的一个数学概念(来自范畴论),用于封装带有上下文的计算(如异步操作、可能为 null 的值),并允许通过 flatMap(在 Promise 中就是 then)来链式组合。
- 提出者认为,如果 Promise 规范明确承认自己是单子,就可以获得更严谨的数学基础,解决一些行为不一致的边界情况。
- 反对者(包括规范维护者)则认为:Promise 的 then 方法行为与单子的 flatMap 并不完全一致(例如 then 会自动展平嵌套 Promise,而单子需要显式操作),强行套用范畴论反而会增加理解门槛,对大多数 JavaScript 开发者不友好。
- 这个讨论反映了 JavaScript 社区中长期存在的一个张力:让语言特性更贴近**数学理论**(更严谨但更难懂),还是更贴近**实际使用场景**(更灵活但边界可能不完美)。最终 Promises/A+ 规范选择不采用单子术语。