我读到了在行业中使用ML的人的轶事,他们认为遇到类型推断限制并且必须在他们的程序中使用显式类型注释是相当频繁的。任何人都可以给出ML的类型推断遇到问题的明确例子,并解释这些限制是否与不可判断有关?
答案 0 :(得分:1)
我现在不能给出一个例子(我已经几个月没有在Ocaml中编码了),但实际上可能发生的是你犯了一个类型错误(即传递错误类型的参数),特别是当使用高阶函数时,类型错误消息可能远离您的真实错误。
为了减轻这种情况,我养成了明确键入大多数内部顶级函数的习惯,比如
let f (x: int) : string =
答案 1 :(得分:1)
可能是this question/answer的副本。快速回答:Hindley / Milner类型推断(在ML中使用)仅限于秩-1多态性,即多态类型是类型系统的二等公民,例如函数参数本身不能是多态的。已知排名较高的多态性(如System F又称多态性lambda演算)的类型推断是不可判定的。