一句话:提出原生支持代数与 scoped effects/handlers 的演算 λ_sc,含多态处理器、转发子句及类型-效应系统与推断。
代数效应与处理器已成为函数式编程中处理副作用的常用方案,但并非所有效应都是代数的:有界作用域(scoped)效应的续延分为作用域内、外两部分,模块化组合更复杂,现有演算尚缺乏对 scoped effects/handlers 的原生支持。本文提出 λ_sc,一个同时原生支持代数与 scoped 效应及处理器的演算,重点解决多态处理器和将未知 scoped 操作转发给其他处理器的显式子句问题。该演算基于 Eff,并扩展 Koka 风格的行多态,给出形式语法、操作语义、类型安全的类型-效应系统及类型推断。作者通过一系列例子展示其表达能力。
Algebraic effects & handlers have become a standard approach for side-effects in functional programming. Their modular composition with other effects and clean separation of syntax and semantics make them attractive to a wide audience. However, not all effects can be classified as algebraic; some need a more sophisticated handling. In particular, effects that have or create a delimited scope need special care, as their continuation consists of two parts-in and out of the scope-and their modular composition introduces additional complexity. These effects are called scoped and have gained attention by their growing applicability and adoption in popular libraries. While calculi have been designed with algebraic effects & handlers built in to facilitate their use, a calculus that supports scoped effects & handlers in a similar manner does not yet exist. This work fills this gap: we present $\lambda_{\mathit{sc}}$, a calculus with native support for both algebraic and scoped effects & handlers. It addresses the need for polymorphic handlers and explicit clauses for forwarding unknown scoped operations to other handlers. Our calculus is based on Eff, an existing calculus for algebraic effects, extended with Koka-style row polymorphism, and consists of a formal grammar, operational semantics, a (type-safe) type-and-effect system and type inference. We demonstrate $\lambda_{\mathit{sc}}$ on a range of examples.
@article{paperbot2705,
title = {A Calculus for Scoped Effects & Handlers},
author = {Roger Bosman and Birthe van den Berg and Wenhao Tang and Tom Schrijvers},
journal = {Logical Methods in Computer Science},
volume = {Volume 20, Issue 4},
year = {2024},
doi = {10.46298/lmcs-20(4:17)2024}
}