我正在关注 Yesod 的书,其中指出:
但是通过使用 -ddump-splices GHC 选项,我们可以立即查看生成的代码。它的一个非常干净的版本是:
我该怎么做?我试过用 编译我的文件ghc -XTemplateHaskell -ddump-splices Page.hs
,它留下的目录如下:
Page Page.hi Page.hs Page.hs~ Page.o
然而,这些文件都不包含由 Template Haskell 生成的中间代码。
我正在关注 Yesod 的书,其中指出:
但是通过使用 -ddump-splices GHC 选项,我们可以立即查看生成的代码。它的一个非常干净的版本是:
我该怎么做?我试过用 编译我的文件ghc -XTemplateHaskell -ddump-splices Page.hs
,它留下的目录如下:
Page Page.hi Page.hs Page.hs~ Page.o
然而,这些文件都不包含由 Template Haskell 生成的中间代码。
同时,行为发生了变化,-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 的外壳上。
在大型项目中,对所有模块都这样做是有问题的。幸运的是,您可以按模块转储。这也适用于 ghci。
您可以将此行添加到模块的顶部
{-# OPTIONS_GHC -ddump-splices #-}
它将它转储到stderr。