system-f中有哪些类型和/或术语无法用Hindley Milner表达

时间:2012-03-01 12:09:13

标签: types type-inference lambda-calculus hindley-milner

我记得在某处读过Hindley Milner是对system-f的限制。如果是这种情况,有人可以请我提供一些可以输入system-f但不能输入HM的条款。

1 个答案:

答案 0 :(得分:10)

涉及更高级别(即“一流”)多态性的任何事物。例如:

lambda f : (forall A. A -> A). (f Int 1, f String "hello")

此函数的类型为(forall A. A -> A) -> Int * String,这在HM中是不可表达的,其中所有多态类型方案必须采用“prenex”形式(即量词可能只出现在外部,从不嵌套)。 / p>