是否可以使用模板 Haskell 发出原始源代码?
Is it possible to emit raw source code with Template Haskell?
假设我有一个包含有效 Haskell 代码的 String
(或 Text
或其他)。有没有办法使用模板 Haskell 将其转换为 [Dec]
?
我很确定 AST 不会直接进入 GHC,所以无论如何都会有打印和解析阶段。
这会很棒,因为它允许 TH 有不同的 "backends"。例如,您可以使用来自 haskell-src-exts
的 AST,它比 TH 支持更多 Haskell 语法。
I'm pretty sure the AST doesn't directly go to GHC so there's going to be a printing and then a parsing stage anyways.
你为什么会这么想?不是这样的,TH AST直接转换为GHC的内部AST;它永远不会在该过程中的任何时候转换回文本。 (如果是的话,那就很奇怪了。)
不过,如果模板 Haskell 公开一种将 Haskell 源代码解析为表达式、类型和声明的方法,那会更好一些,基本上公开各种 e
背后的解析器, t
和 d
模板 Haskell 中内置的引号。不幸的是,它没有,而且我认为目前没有任何改变它的计划。
目前,您需要通过 haskell-src-exts
。这有点不太理想,因为 haskell-src-exts
的解析器和 GHC 之间存在 差异,但它与您目前将要获得的一样好。为了减轻痛苦,a package called haskell-src-meta
连接了 haskell-src-exts
和 template-haskell
。
对于您的用例,您可以使用 Language.Haskell.Meta.Parse
中的 parseDecs
函数,其类型为 String -> Either String [Dec]
,这正是您要查找的类型。
假设我有一个包含有效 Haskell 代码的 String
(或 Text
或其他)。有没有办法使用模板 Haskell 将其转换为 [Dec]
?
我很确定 AST 不会直接进入 GHC,所以无论如何都会有打印和解析阶段。
这会很棒,因为它允许 TH 有不同的 "backends"。例如,您可以使用来自 haskell-src-exts
的 AST,它比 TH 支持更多 Haskell 语法。
I'm pretty sure the AST doesn't directly go to GHC so there's going to be a printing and then a parsing stage anyways.
你为什么会这么想?不是这样的,TH AST直接转换为GHC的内部AST;它永远不会在该过程中的任何时候转换回文本。 (如果是的话,那就很奇怪了。)
不过,如果模板 Haskell 公开一种将 Haskell 源代码解析为表达式、类型和声明的方法,那会更好一些,基本上公开各种 e
背后的解析器, t
和 d
模板 Haskell 中内置的引号。不幸的是,它没有,而且我认为目前没有任何改变它的计划。
目前,您需要通过 haskell-src-exts
。这有点不太理想,因为 haskell-src-exts
的解析器和 GHC 之间存在 差异,但它与您目前将要获得的一样好。为了减轻痛苦,a package called haskell-src-meta
连接了 haskell-src-exts
和 template-haskell
。
对于您的用例,您可以使用 Language.Haskell.Meta.Parse
中的 parseDecs
函数,其类型为 String -> Either String [Dec]
,这正是您要查找的类型。