可以输入inferer检测类型错误吗?

时间:2018-03-16 14:56:43

标签: functional-programming interpreter language-design hindley-milner

我正在开发一种函数式编程语言的解释器,它使用了Hindley-Milner类型的系统。

问题是,应该在哪里发生类型错误(被检测到)?

例如,如果我将Integer类型值应用于类型为Bool -> Integer的函数,则这显然是类型错误。类型推断器总能检测到这个吗?

我的推测是,类型提供者并不总是完全知道表达的类型,即在推理过程中。因此,类型提供者检测到的某些错误可能是错误的,或者无法检测到某些错误。

但是,表达式求值程序应该正确检测类型错误,因为求值程序完全知道表达式的类型。

如果类型提示器无法正确检测类型错误,那么静态类型解释语言如OCaml如何处理静态类型错误检查?

1 个答案:

答案 0 :(得分:0)

  

......类型错误。类型推断器总能检测到这个吗?

如果您的类型推断是声音,那么是的,它应该始终检测到错误。

对于Hindley-Milner类型的系统,特别是该算法依赖统一来查找主体类型。如果没有,你最终会出现统一错误。