是否可以使用Template Haskell发出原始源代码?

时间:2017-01-03 10:48:41

标签: haskell template-haskell

假设我有String(或Text或其他)包含有效的Haskell代码。有没有办法将它转换为带有模板Haskell的[Dec]

我很确定AST不会直接进入GHC,因此无论如何都会打印出来然后再进行解析。

这将是很好的,因为它将允许不同的"后端"向前。例如,您可以使用来自haskell-src-exts的AST,它支持比TH更多的Haskell语法。

1 个答案:

答案 0 :(得分:6)

  

我很确定AST没有直接进入GHC,所以无论如何都会有打印然后解析阶段。

为什么你会这么想?事实并非如此,TH AST直接转换为GHC的内部AST;它永远不会在该过程中的任何时刻转换回文本。 (如果确实如此,那就太奇怪了。)

但是,如果Template Haskell公开了一种将Haskell源解析为表达式,类型和声明的方法,基本上暴露了各种et和{{1模板Haskell内置的引用。不幸的是,它没有,我不相信目前有任何改变它的计划。

目前,您需要通过d代替。这有点不太理想,因为haskell-src-exts的解析器和GHC之间存在 差异,但它与您目前要获得的一样好。为了减轻痛苦,有a package called haskell-src-meta桥梁haskell-src-extshaskell-src-exts

对于您的使用案例,您可以使用Language.Haskell.Meta.Parse中的template-haskell函数,该函数的类型为parseDecs,这是您正在寻找的内容。