我最近一直在学习λ微积分。我了解了未类型化和类型化λ微积分之间的区别。但是,我对 Hindley-Milner类型系统和类型λ微积分之间的区别不清楚。是关于parametric polymorphism还是其他区别?
谁能清楚指出两者之间的差异(和相似之处)?
答案 0 :(得分:2)
我查看类型λ微积分和 Hindley-Milner类型系统之间的关系的方式是类型λ微积分是< strong>λ微积分并添加了类型。您无需 Hindley-Milner类型系统即可进行类型的λ微积分,例如所有类型都已声明,无法推断。
现在,如果您要编写基于类型λ微积分的strongly statically typed编程语言,并且想省略type annotations从而允许类型为inferred,使用type inference,很可能您会使用 Hindley-Milner类型系统或其变体。
对此进行考虑的另一种方法是,在基于类型λ微积分创建编程语言时,编译器将具有phases,其中一个将使用 Hindley-米尔纳类型系统。这些阶段的顺序为:
对此进行思考的另一种方式是,type system具有一组type rules,并且Hindley-Milner type system是具有一组特定类型规则的特定类型系统。 Hindley-Milner type system的主要优点之一是,它可以高效地推断类型,并且在sought中具有许多类型化规则functional programming,例如Let-polymorphism和parametric polymorphism。在现实世界中,如果您要创建一种编程语言并希望推断类型,那么您希望在合理的时间内完成该操作,例如秒。由于inferencing可以导致combinatorial explosion,因此通常会寻求一套有效的规则,这就是Hindley-Milner type system如此频繁使用或引用的主要原因之一。
有关基于类型λ演算的现实世界编程语言,请参见System F。
答案 1 :(得分:1)
区别是type systems for the lambda calculus有很多,Hindley-Milner就是其中之一。 Hindley-Milner是具有参数多态性的类型系统。这就是我们今天的编程语言中所说的泛型。