Types system-f中哪些类型和/或术语不能用Hindley Milner表示

Types system-f中哪些类型和/或术语不能用Hindley Milner表示,types,type-inference,lambda-calculus,hindley-milner,Types,Type Inference,Lambda Calculus,Hindley Milner,我记得在某个地方读到辛德利·米尔纳是对system-f的限制。如果是这样,请有人给我提供一些可以在system-f中键入但不能在HM中键入的术语。任何涉及更高级别(即“一级”)多态性的术语。例如: lambda (f : forall A. A -> A). (f Int 1, f String "hello") 此函数的类型为(对于所有A.A->A)->Int*String,在HM中无法表达,其中所有多态类型方案必须为“prenex”形式(即量词只能出现在外部,不能嵌套)。不确定您的意

我记得在某个地方读到辛德利·米尔纳是对system-f的限制。如果是这样,请有人给我提供一些可以在system-f中键入但不能在HM中键入的术语。

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

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

此函数的类型为
(对于所有A.A->A)->Int*String
,在HM中无法表达,其中所有多态类型方案必须为“prenex”形式(即量词只能出现在外部,不能嵌套)。

不确定您的意思,该表达式不是函数。定义(通过let绑定)可以与HM多态,但函数参数不能。