以CS101学生可以理解的方式描述Damas-Milner类型推断

时间:2009-07-10 13:28:01

标签: functional-programming type-inference hindley-milner

Hindley-Milner是一种类型系统,是许多众所周知的函数式编程语言的类型系统的基础。 Damas-Milner是一种在Hindley-Milner型系统中推断(推导?)类型的算法。

Wikipedia给出了算法的描述,据我所知,该算法相当于一个单词:“统一”。这就是它的全部吗?如果是这样,那意味着有趣的部分是类型系统本身而不是类型推理系统。

如果Damas-Milner不仅仅是统一,我想要一个Damas-Milner的描述,其中包括一个简单的例子,理想情况下是一些代码。

此外,该算法通常被称为类型推断。它真的是一个推理系统吗?我认为这只是推断出类型。

相关问题:

2 个答案:

答案 0 :(得分:11)

Damas Milner只是统一的结构化使用。

当它递归到lambda表达式时,它组成一个新的变量名。当您在子项中找到以需要给定类型的方式使用的变量时,它会记录该变量和该类型的统一。如果它曾试图统一两种没有意义的类型,比如说一个单独的变量既是一个Int又是一个来自a - >的函数。 b,然后它因为做坏事而大喊你。

  

此外,该算法通常被称为类型推断。它真的是一个推理系统吗?我认为这只是推断出类型。

推断类型是类型推断。检查类型注释是否对给定术语有效是类型检查。他们是不同的问题。

  

如果是这样,那意味着有趣的部分是类型系统本身而不是类型推理系统。

人们普遍认为,Hindley-Milner风格的系统在风口浪尖上是平衡的。如果添加更多功能,则无法推断出类型。因此,键入系统扩展,您可以在Hindley-Milner样式类型系统之上进行分层而不破坏其推理属性,这实际上是现代函数式语言的有趣部分。在某些情况下,我们混合类型推断和类型检查,例如在Haskell中很多现代扩展都无法推断,但可以检查,因此它们需要类型注释来获得高级特征,如多态递归。

答案 1 :(得分:1)

  

维基百科给出了算法的描述,据我所知,该算法相当于一个单词:“统一”。这就是它的全部吗?如果是这样,那意味着有趣的部分是类型系统本身而不是类型推理系统。

IIRC,Damas-Milner类型推断算法W的有趣部分是它推断出最普​​遍的类型。