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

him*_*him 5 functional-programming type-inference lambda-calculus hindley-milner parametric-polymorphism

我最近一直在学习β微积分。我了解未类型化和类型化的α演算之间的区别。但是,我对Hindley-Milner类型系统类型化α-微积分之间的区别还不太清楚。是关于参数多态性还是其他差异?

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

Guy*_*der 2

我看待类型化 \xce\xbb-calculusHindley-Milner 类型系统之间关系的方式是,类型化 \xce\xbb-calculus是添加了类型的\xce\xbb-calculus 。您可以执行类型化的 \xce\xbb-calculus而不需要Hindley-Milner 类型系统,例如所有类型都被声明,而不是推断。

\n\n

现在,如果您要编写基于类型化 \xce\xbb-calculus的强静态类型编程语言,并且想要省略类型注释以允许推断类型,则使用类型推断,并且很可能您会使用Hindley-Milner 类型系统或它的一个变体。

\n\n

另一种思考方式是,当创建基于类型化 xcexbb-calculus 的编程语言时,编译器将具有阶段,其中一个阶段将使用Hindley-Milner 类型系统。各阶段的顺序为:

\n\n
    \n
  1. 语法检查 - Lexer
  2. \n
  3. 语义检查 -解析器
  4. \n
  5. 类型推断- Hindley-Milner 类型系统
  6. \n
  7. 类型检查
  8. \n
  9. ...
  10. \n
\n\n

另一种思考方式是,类型系统具有一组类型规则,而Hindley-Milner 类型系统是具有一组特定类型规则的特定类型系统。Hindley-Milner 类型系统的主要优点之一是,它对于推断类型来说非常省时,并且还具有函数式编程寻求的许多类型规则,例如Let 多态性参数多态性。在现实世界中,如果您正在创建一种编程语言并希望推断类型,那么您希望在合理的时间内完成,例如几秒钟。由于推理可能导致组合爆炸,因此经常寻求一组有效的规则,这也是Hindley-Milner 类型系统如此频繁使用或引用的主要原因之一。

\n\n

对于基于类型 \xce\xbb-calculus 的现实世界编程语言,请参阅System F

\n