18

我正在关注 Yesod 的书,其中指出:

但是通过使用 -ddump-splices GHC 选项,我们可以立即查看生成的代码。它的一个非常干净的版本是:

我该怎么做?我试过用 编译我的文件ghc -XTemplateHaskell -ddump-splices Page.hs,它留下的目录如下:

Page Page.hi Page.hs Page.hs~ Page.o

然而,这些文件都不包含由 Template Haskell 生成的中间代码。

http://www.yesodweb.com/book/basics

4

2 回答 2

17

同时,行为发生了变化,-ddump-to-file除了标志之外的-ddump-splices标志会导致将拼接写入文件,有关更多详细信息,请参阅当前(GHC 8.2.1)文档的第 9.26 节。


在旧版本的 GHC 上(我没有检查行为改变的确切版本),-ddump-splices工作方式不同:

-ddump-splices选项使 GHC 将拼接转储到 stderr。不幸的是,该-ddump-to-file标志不会影响拼接(我不知道这是有更深层次的原因还是只是疏忽),因此您需要捕获 stderr 输出以保存拼接以供以后调查,

ghc -XTemplateHaskell -ddump-splices Page.hs 2> Page.dump-splices

在足够类似 bash 的外壳上。

于 2013-04-06T12:59:05.550 回答
2

在大型项目中,对所有模块都这样做是有问题的。幸运的是,您可以按模块转储。这也适用于 ghci。

您可以将此行添加到模块的顶部

{-# OPTIONS_GHC -ddump-splices #-}

它将它转储到stderr。

于 2021-06-16T12:39:00.050 回答