假设我有String
(或Text
或其他)包含有效的Haskell代码。有没有办法将它转换为带有模板Haskell的[Dec]
?
我很确定AST不会直接进入GHC,因此无论如何都会打印出来然后再进行解析。
这将是很好的,因为它将允许不同的"后端"向前。例如,您可以使用来自haskell-src-exts
的AST,它支持比TH更多的Haskell语法。
答案 0 :(得分:6)
我很确定AST没有直接进入GHC,所以无论如何都会有打印然后解析阶段。
为什么你会这么想?事实并非如此,TH AST直接转换为GHC的内部AST;它永远不会在该过程中的任何时刻转换回文本。 (如果确实如此,那就太奇怪了。)
但是,如果Template Haskell公开了一种将Haskell源解析为表达式,类型和声明的方法,基本上暴露了各种e
,t
和{{1模板Haskell内置的引用。不幸的是,它没有,我不相信目前有任何改变它的计划。
目前,您需要通过d
代替。这有点不太理想,因为haskell-src-exts
的解析器和GHC之间存在 差异,但它与您目前要获得的一样好。为了减轻痛苦,有a package called haskell-src-meta
桥梁haskell-src-exts
和haskell-src-exts
。
对于您的使用案例,您可以使用Language.Haskell.Meta.Parse
中的template-haskell
函数,该函数的类型为parseDecs
,这是您正在寻找的内容。