如何制作约束蕴含函数(||-)? (关联类型同义词)

How to make the constraint-entailment function (||-)? (associated type synonyms)

我只是一个非计算科学与工程专业的业余爱好者

最近,我做了一个微型函数式编程语言:https://github.com/mecheng98/nabi

但是 nabi 是无类型的,所以我想给它添加一个类型检查器。

具体目标是实现一个基于haskell98但支持唯一扩展的类型检查器"associated type synonyms"。

我阅读了这篇论文 Associated Type Synonyms,然后尝试制作约束蕴含函数 (||-)。

但是我没有做到,因为我太难了(||-)应用推理规则"EQ_subst"而不陷入无限循环。

能否请您给我一个制作 (||-) 的提示并教我如何实现我的目标?

+) 我希望以 THIH 风格表示类型。

非常感谢您阅读我的问题。新年快乐。

I read the paper Associated Type Synonyms right then tried to make the constraint-entailment function (||-).

But I failed to do it, because it is too hard for me to have (||-) apply the inference rule "EQ_subst" and not fall into infinite loop.

这听起来像是在尝试直接实施类型化规则(图 2),但仅靠这些并不能提供有效的类型检查程序。该论文还介绍了一种类型推断算法(第 5 节;图 4、5),这是应该实现的。要学习该部分,您可能需要先很好地掌握 Hindley-Milner 类型推断和统一。

  • GHC 的类型推断实际上是如何工作的 (talk),Simon Peyton Jones
  • ML 类型推断的本质 (PDF),François Pottier 和 Didier Rémy