Haskell去糖化的策略

10

我正在开发一款纯函数编程的虚拟机,希望能够测试和使用已经存在的各种Haskell模块。该虚拟机的输入基本上是未类型化的 lambda 演算表达式。我想知道从现代 Haskell 模块(例如,使用 MPTC、模式守卫等)中提取这种表达式的好方法。我做了一些研究,似乎没有现成的工具可以做到这一点(如果我错了,那就太好了),但这没关系,我正在寻找一种方法。

GHC Core 似乎过于关注操作层面,特别是因为该虚拟机的一个功能是显著改变求值顺序。是否有一些可访问的中间表示形式更接近 lambda 演算?


核心路由意味着你是通过case语句来驱动的——但是你可以将它们转换回教堂编码,然后你就完成了90%的工作,不是吗? - sclv
@sclv,嗯,这是一个很好的观点。 - luqui
3个回答

5

不确定我是否会采用它,但这是一个很好的答案,可以帮助你开始使用Core处理,这是我过去认为令人生畏的东西。 - luqui

3
EHC曾经在表示之间使用以下流程:
HS -> EH -> Core -> Grin -> Silly
其中HS显然是Haskell,EH不太甜并由类型检查器使用,Core是GHC Core的类比,而Grin和Silly比这更低级。
有一篇由Jeroen Fokker描述EHC架构的论文,我从中借鉴了上面的内容,但它可能已经过时(我不知道EHC是否仍然使用Silly表示)。我认为EHC为其每个内部表示提供解析器和漂亮的打印机,这将非常方便。
还有来自YHC的York.Core,我看到人们对它的评价比GHC Core更好,但我不知道是否有一种方法将“现代”Haskell编译成York.Core。

是的,我在提问后立刻找到了EHC。但那不是Haskell,它是一种混合面向方面和属性文法的东西,我发现很难读懂。好吧,可能得咬咬牙,看看我能用Antoine建议的工具做到什么程度... - luqui

1
嗯...你听说过Haskell Kernel吗?我不确定你需要什么。它是一种某种程度上被解糖的Haskell,基本上在Haskell报告中定义。我不确定这是否是你所需要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接