Hindley-Milner 类型推导的根本局限性
世界上最糟糕的因为片面追求“短小”而产生的理论,莫过于 Hindley-Milner (HM)类型系统了。HM 系统所谓的“类型推导”,其实只是为了可以不在函数参数等地方写类型标记。
写点类型标记真的有那么痛苦吗?其实并不是,反而类型标记可以帮助人的阅读。看到类型标记,读者不需要运行代码,不需要去看调用者,就能知道这些参数里面可能是什么。缺少了类型标记,读者就得自己去做“人脑类型推导”,反而更加痛苦。
HM 类型系统诞生于一个玩具(工具)语言 ML,它并没有考虑大规模工程实践。后来的 OCaml 和 Haskell 等语言都受其害,在其基础上发展,最后弄得非常难懂,却有很多不必要的限制。很多本来应该可以写的代码,通过不了 HM 的类型推导。
Kent Dybvig 是不信仰 HM 系统的。有一次他跟我们讲了…

