把 Haskell 的 effect system 改称 capability system,为什么更准确
来源: h2.jaguarpaw.co.uk — 2026-09-06
概述
作者 Tom Ellis 解释他为何决定把 Haskell effect system Bluefin 从“effect system”改称为“capability system”。capability(能力)本是一个源自安全领域的 OS 概念:一个程序实体既指代某个资源又授予访问它的权限,文件句柄就是最典型的例子。作者论证 effect system 与 capability system 本质上是同一回事——无论是类型层面的约束(effectful/MTL)还是值层面的参数(Bluefin 的 Database es、Throw String es),其作用都是把“能执行哪些外部可见行为”限制在指定集合内,而这恰恰是 capability 的定义。改名的三个理由:更符合概念本源、避免让外人误以为 Haskell 需要什么“特殊系统”才能做 effect、以及“capability systems can be used to constrain architecture”这句话比“effect systems”更自然地道,尤其在 AI 生成代码的时代,能力系统是约束架构边界、保障安全的关键工具。
effect system 的真正价值不是让你能执行 effect,而是禁止组件执行指定集合之外的 effect
在 AI 生成代码的时代,capability system 是约束架构边界、强化安全属性的有力工具,而旧术语无法传达这种工程价值
金句
Capability systems can be used to constrain architecture — you give each component in your architecture the capability to perform only what it needs to.(能力系统可以用于约束架构——给每个组件它真正需要的那份能力就够了。)