“异常是一种非局部控制转移:错误发生处不必逐层手写返回码,而是把当前普通续延丢弃,跳到最近的处理器。把结果想成“正常通道或异常通道”有助于理解传播规则;和类型能表示这一区分,但隐式异常还额外改…”
形式陈述 ​
给定类型
消去通过分支分析完成:
计算时根据标签选择对应分支。标签使两侧即使底层表示相同也能被可靠区分。
直觉
和类型表达“这里有一份
例子与边界
和类型
可选值可定义为 None 使用单位类型一侧,Some(a) 使用 case 明确处理除零与正常商。
边界是未经标记的“联合内存”:若只存一段比特而不记录当前分支,读取者可能用错误类型解释数据。另一个常见错误是漏掉一个模式分支;类型规则要求两个分支都产生同一结果类型 case 无法定型。
推论与应用
和类型是枚举、变体、错误返回和抽象语法构造器的基础。异常语义可显式化为正常结果与错误的和;有限构造子的选择、字段积与可选递归如何统一成代数数据类型,由汇总页集中说明,本页保留二选一的引入、消去与标签边界。
在Curry–Howard 对应下,
参考资料
- Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002,Ch. 11, variants and sums。
- Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016,Ch. 12, sum types。