Lobsters | 📄 原文链接 | 2026-10-17 收录

EYG 高级效果指南:如何给处理器带上状态

来源:eyg.run — 2026-10-15

📋 概述

这是 EYG 语言效果系统的高级指南,讲处理器如何依赖计算之外的状态。以 Increment 效果为例,处理器需要追踪当前计数:实现上用 handle 表达式分别处理操作与返回值,操作分支接收一个状态参数并在恢复计算时把它传回,返回值分支则在计算结束后把最终状态与结果一起返回。语言设计上有一条重要限制——每个 handle 表达式只对应一个效果标签,多效果需要嵌套处理器,但嵌套时要小心多个处理器之间共享状态;这是为了让类型系统保持简单的有意取舍,未来可能放宽。想要多个可操作的效果有两条路:一是设计一个通用状态效果,让所有操作都走同一个 Update 效果(接收「当前状态到新状态」的变换),再在其上实现 get、increase 等公开接口;二是在无法控制效果设计时(例如测试引入的库),用「效果弹跳」把 Get、Increase 这类操作转译到自己可控制的 State 效果上,此时只有 State 处理器持有状态。指南还警告:不要从效果里返回函数,因为那会让该函数的类型出现在效果行的返回类型中,调用时与当前代码块的效果统一,从而构造出递归类型并触发「this expression has a recursive type」错误。

🔑 核心要点

💡 金句

不要从效果中返回函数,原因就在这里。
← 返回 Lobsters 首页