隐式类型高阶语言中的类型错误切片技术
在编程过程中,类型错误的定位一直是一个具有挑战性的问题,尤其是在隐式类型的高阶语言中。传统方法往往难以准确找到类型错误的位置,而一种新的类型错误切片方法为解决这一问题提供了新的思路。
1. 传统类型错误定位方法的不足
在隐式类型且具有 let - 多态性的高阶语言(如 Haskell、Miranda、O’Caml、Standard ML 等)中,解释类型错误一直是一个难题。以往的方法通常将类型错误的位置确定为某个特定的程序点或以此点为根的程序子树,但这些方法并不令人满意。
例如,有如下 SML 程序片段:
val f = fn x => fn y => let val w = x + 1 in w::y end
该程序定义了一个函数 f ,调用 (f 1 [2]) 应计算出列表 [2, 2] 。若程序员错误地写成:
val f = fn x => fn y => let val w = y + 1 in w::y end
当使用 W、M 或 UAE 类型推断算法来确定错误位置时,这些算法会遍历程序的抽象语法树,失败时会将当前访问的节点归咎为错误点。不同算法检查类型约束的急切程度不同,可能会在不同节点失败。
| 算法 | <
|---|
超级会员免费看
订阅专栏 解锁全文
22

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



