简单键入的lambda演算与Hindley-Milner类型的系统

时间:2018-10-01 16:36:14

标签: functional-programming type-inference lambda-calculus parametric-polymorphism hindley-milner

我最近一直在学习λ微积分。我了解了未类型化和类型化λ微积分之间的区别。但是,我对 Hindley-Milner类型系统类型λ微积分之间的区别不清楚。是关于parametric polymorphism还是其他区别?

谁能清楚指出两者之间的差异(和相似之处)?

2 个答案:

答案 0 :(得分:2)

我查看类型λ微积分 Hindley-Milner类型系统之间的关系的方式是类型λ微积分是< strong>λ微积分并添加了类型。您无需 Hindley-Milner类型系统即可进行类型的λ微积分,例如所有类型都已声明,无法推断。

现在,如果您要编写基于类型λ微积分strongly statically typed编程语言,并且想省略type annotations从而允许类型为inferred,使用type inference,很可能您会使用 Hindley-Milner类型系统或其变体。

对此进行考虑的另一种方法是,在基于类型λ微积分创建编程语言时,编译器将具有phases,其中一个将使用 Hindley-米尔纳类型系统。这些阶段的顺序为:

  1. 语法检查-Lexer
  2. 语义检查-Parser
  3. Type inference-Hindley-Milner type system
  4. Type checking
  5. ...

对此进行思考的另一种方式是,type system具有一组type rules,并且Hindley-Milner type system是具有一组特定类型规则的特定类型系统。 Hindley-Milner type system的主要优点之一是,它可以高效地推断类型,并且在sought中具有许多类型化规则functional programming,例如Let-polymorphismparametric polymorphism。在现实世界中,如果您要创建一种编程语言并希望推断类型,那么您希望在合理的时间内完成该操作,例如秒。由于inferencing可以导致combinatorial explosion,因此通常会寻求一套有效的规则,这就是Hindley-Milner type system如此频繁使用或引用的主要原因之一。

有关基于类型λ演算的现实世界编程语言,请参见System F

答案 1 :(得分:1)

区别是type systems for the lambda calculus有很多,Hindley-Milner就是其中之一。 Hindley-Milner是具有参数多态性的类型系统。这就是我们今天的编程语言中所说的泛型。