效果进类型
函数默认是纯的,碰 IO 必须在签名标 !io——看签名即知它碰不碰外界,纯函数测试零 mock。第二条轴是你自己声明的具名效果:effect 声明操作、with handle 就地应答,标签随签名传播,只在 handle 这一个语法节点上被减掉。这一档有规范、两个后端都实现了、也有测试,但它还没有内部使用者:标准库和编译器都没有声明过具名效果。
effect Ask {
fn ask() -> Int
}
# Pure. The signature says it asks; it does not say whom
fn total() -> Int !Ask = ask() + ask()
pub fn main() -> Unit !io = {
with handle Ask { ask() => 21 }
println("${total()}")
}
42