隐式类型高阶语言中的类型错误切片技术
1. 表达式约束集分析
考虑如下表达式结构:
let
val x1 = lexp
in
let
val x2 = f x1 x1
in
...
let
val xn = f xn−1 xn−1
in
f xn xn
end ... end
最终得到的约束集包含 lexp 约束集的 2n 个变体。若 lexp = (fn x => x) 且 f 的类型方案假定为 (∀a.∀b. a -> b -> a -> b) ,则整个表达式的主类型方案包含 2(n + 1) 个不同的类型变量。需要注意的是,在小型表达式语言中,Hindley/Milner(SML)类型可判定性是指数时间完备的。
2. 寻找最小不可解约束集
定义函数 labels(C) = { l | (∃ty, ty′)((ty = l== ty′) ∈C) } ,它将原子标记的约束集映射到相关标记集。若约束集 C 有不可解子集 C′ 使得 L = labels(C′) ,则标记集 L <
类型错误切片技术在高阶语言中的应用
超级会员免费看
订阅专栏 解锁全文
4万+

被折叠的 条评论
为什么被折叠?



