Compiler construction Haskell脱糖策略

Compiler construction Haskell脱糖策略,compiler-construction,haskell,lambda-calculus,Compiler Construction,Haskell,Lambda Calculus,我正在为纯功能程序开发一个虚拟机,我希望能够测试和使用各种各样的Haskell模块。VM将非类型化lambda演算中的基本术语作为输入。我想知道从现代Haskell模块(例如使用MPTC、模式保护等)中提取这种表示的好方法是什么。我做了一些研究,但似乎还没有一个工具可以做到这一点(我很高兴弄错了),这没关系。我正在寻找一种方法 GHC核心似乎过于注重操作,特别是因为虚拟机所做的一件事就是显著改变评估顺序。有没有更接近lambda演算的可访问的中间表示法?Hm。。。听说过这个吗?我不知道你需要什么

我正在为纯功能程序开发一个虚拟机,我希望能够测试和使用各种各样的Haskell模块。VM将非类型化lambda演算中的基本术语作为输入。我想知道从现代Haskell模块(例如使用MPTC、模式保护等)中提取这种表示的好方法是什么。我做了一些研究,但似乎还没有一个工具可以做到这一点(我很高兴弄错了),这没关系。我正在寻找一种方法


GHC核心似乎过于注重操作,特别是因为虚拟机所做的一件事就是显著改变评估顺序。有没有更接近lambda演算的可访问的中间表示法?

Hm。。。听说过这个吗?我不知道你需要什么。这是一种脱糖的Haskell,本质上是在Haskell报告中定义的。我不确定这是否是您所需要的。

使用GHC,GHC的外部核心与lambda演算非常接近。是一个直接指向表达式类型的链接,如果您想直接跳入

  • 用于处理外部核心文件
  • 如何使用GHC创建外部核心
  • 关于其使用的学术报告

EHC过去在表示之间有此流程:

HS->EH->核心->咧嘴笑->傻

HS显然是哈斯凯尔,EH含糖量较低,由类型检查器使用,Core与GHC的Core类似,而Grin和Styly的水平较低

有一篇Jeroen Fokker的文章描述了EHC的架构,我从中抄袭了上面的内容,但它可能已经过时了(我不知道EHC仍然使用愚蠢的表示)。我认为EHC为它的每个内部表示提供了解析器和漂亮的打印机,这很方便


还有YHC的York.Core,我看到人们对它的评价比GHC Core更高,但我不知道是否有办法将“现代”Haskell编译成York.Core。

是的,我一问这个问题就找到了EHC。这不是Haskell,而是一些我觉得很难理解的面向方面的属性语法。哦,好吧,可能得咬紧牙关,这取决于我能用Antoine建议的工具走多远…核心路线意味着你受案例陈述的驱动-但你可以把这些转换回教堂编码,然后你就可以完成90%的工作了,不是吗?@sclv,嗯,这是一个很好的观点。不确定我是否会同意它,但这是开始核心处理的一个很好的答案,我过去认为这是一件令人畏惧的事情。