我正在开发一种函数式编程语言的解释器,它使用了Hindley-Milner类型的系统。
问题是,应该在哪里发生类型错误(被检测到)?
例如,如果我将Integer
类型值应用于类型为Bool -> Integer
的函数,则这显然是类型错误。类型推断器总能检测到这个吗?
我的推测是,类型提供者并不总是完全知道表达的类型,即在推理过程中。因此,类型提供者检测到的某些错误可能是错误的,或者无法检测到某些错误。
但是,表达式求值程序应该正确检测类型错误,因为求值程序完全知道表达式的类型。
如果类型提示器无法正确检测类型错误,那么静态类型解释语言如OCaml如何处理静态类型错误检查?
答案 0 :(得分:0)
......类型错误。类型推断器总能检测到这个吗?
如果您的类型推断是声音,那么是的,它应该始终检测到错误。
对于Hindley-Milner类型的系统,特别是该算法依赖统一来查找主体类型。如果没有,你最终会出现统一错误。