自下而上的Hindley-Milner类型推断:将替换应用于隐式约束

时间:2012-07-30 14:56:53

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

我正在尝试实现'自下而上'类型推理算法,该算法可在Generalizing Hindley-Milner Type Inference Algorithms

中找到

第6页解释了隐式约束是如何

  

t1应该是类型方案的一个实例,它是通过相对于单态类型变量t2

的类型M进行推广而获得的。

但是,在第9页,在解释如何将替换应用于隐式约束时,我被告知要对这组单态类型变量应用替换。问题是,如果我有替换[t1 := t2 -> t3],则M不再是一组类型变量。

我在这里误解了什么?

2 个答案:

答案 0 :(得分:3)

我与报纸的作者联系,当他们告诉我答案时,我确实对自己做了一些启示:

替换函数的格式为S : Substitution -> a -> a,因此在将其应用于一组类型变量时,结果将是一组类型变量。

因此,在应用[t1 := t2 -> t3]而非替换为t2 -> t3时,我将ftv(t2 -> t3)替换为[t2, t3](其中ftv是获取免费类型变量的函数在一种类型)。

答案 1 :(得分:1)

如果将单态类型变量集编码为一组单纯类型(而不是裸变量名),则第9页上的freevars(M)中的freevars不需要(还有另一个)重载,同样适用于应用程序替换。

在这方面,SOLVE的输入似乎有点破坏:在activevars的定义中,freevars应用于M,而在SOLVE中,freevars不应用于M(" freevars(t2) - M") ,M可能不包含类型方案,即具有绑定变量。那么M是一个自由变量名称(不需要在使用其他freevars(t)的set操作之前应用freevars)或者它是一组monotypes(需要应用freevars)吗?