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

标签 haskell compiler-construction type-constraints

我只是一个业余爱好者,专业不是计算科学与工程。

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

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

我的一个具体目标是实现一个基于 haskell98 但支持唯一扩展“关联类型同义词”的类型检查器。

我读了这篇论文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

关于haskell - 如何制作约束蕴涵函数(||-)? (关联类型同义词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59540558/

相关文章:

java - Java 是否将除以 2 的幂的除法优化为位移位?

c# - 如何将 `where T : U` 泛型类型参数约束从 C# 转换为 F#?

c# - 语句 block 中的变量范围

java - 关于Java中类成员的问题

c# - 什么时候在 C# 中拥有公共(public)无参数构造函数很重要?

swift - 类扩展typealias的属性类型约束

haskell - runST和函数组成

haskell - 选择哪种 FRP 包?

opengl - 如何获得光泽而不关闭ghci?

haskell - 我可以读取 GHCJS 中的文件吗?