为什么 Scala 中的高阶统一被认为是部分的?

问题描述

SI-2712 Add support for partial unification of type constructors #5102 最初提供了 flag 下的功能

-Yhigher-order-unification

然后将其重命名

-Ypartial-unification

因为根据

它似乎不是完全的高阶统一

comment

“部分类型应用程序推断”可能是一个更好的术语 这里发生的不是“高阶统一”,这是最 肯定不是

comment 2

将其重命名-Ypartial-unification 以反映它没有的事实 实现一个通用的 HOU 算法。

部分统一与高阶统一有何不同?在什么意义上 Scala 没有实现高阶统一?当 Scala 无法执行 HOU 时,您能用具体的代码片段来演示吗?

解决方法

总的来说,如果“缺失”类型是最右边的类型,Scala 实现只会执行高阶统一。

Daniel Spiewak 用一个基本上是 Either 但左偏的类型的函子实例演示了这一点。