haskell - 如何制作约束蕴涵函数(||-)?(关联类型同义词)
问题描述
我只是一个不主修计算科学与工程的业余爱好者。
最近做了一个微小的函数式编程语言:https ://github.com/mecheng98/nabi
但是 nabi 是无类型的,所以我想给它添加一个类型检查器。
我实现一个基于 haskell98 但支持唯一扩展“关联类型同义词”的类型检查器是一个具体目标。
我立即阅读了Associated Type Synonyms论文,然后尝试制作约束-蕴涵函数 (||-)。
但我没能做到,因为我很难让 (||-) 应用推理规则“EQ_subst”而不陷入无限循环。
您能否给我一个提示(||-)并教我如何实现我的目标?
+) 我希望以THIH风格表示类型。
非常感谢您阅读我的问题。新年快乐。
解决方案
我立即阅读了 Associated Type Synonyms 论文,然后尝试制作约束-蕴涵函数 (||-)。
但我没能做到,因为我很难让 (||-) 应用推理规则“EQ_subst”而不陷入无限循环。
这听起来像是试图直接实现类型规则(图 2),但仅靠这些并不能提供有效的类型检查过程。该论文还提出了一种类型推断算法(第 5 节;图 4、5),这就是应该实现的。要遵循该部分,您可能需要首先很好地掌握 Hindley-Milner 类型推断和统一。
推荐阅读
- python - 无法将字符串转换为浮点数,尽管字符串“”中的内容似乎是一个数字
- python - Anaconda Navigator(版本 1.9.12)未在 Windows 10 中升级
- c++ - 当我尝试从文件中读取时,由于某种原因会跳过文件的第一个和第三个单词
- javascript - WebScraping 产品名称 PUPPETEER JS 失败
- bash - 将 txt 文件的标题和内容连接成两列 csv、bash
- flutter - 在 Flutter 中完成后定时器取消
- python - 如何解决 IndexError:列表理解语句中标量变量的无效索引?Python 3.7.7
- reactjs - 带有 setState 和多个组件的空白页
- c++ - 在 llvm - windows 中仅安装 clang 和 clang++
- javascript - 如何通过 React 在 p5 中使用 async 和 await?