我正在关注Yesod书,其中指出:
但是通过使用-ddump-splices GHC选项,我们可以立即获得 看看生成的代码。一个很清理的版本是:
我该怎么做?我尝试使用ghc -XTemplateHaskell -ddump-splices Page.hs
编译我的文件,该文件离开目录如下:
Page Page.hi Page.hs Page.hs~ Page.o
但是,这些文件都不包含Template Haskell生成的中间代码。
答案 0 :(得分:16)
同时行为发生了变化,除了-ddump-to-file
标志之外,-ddump-splices
标志还会将拼接写入文件,请参阅当前的Section 9.26(GHC 8.2.1)文档了解更多详情。
在较旧版本的GHC上(我没有检查行为改变的版本),-ddump-splices
的工作方式不同:
-ddump-splices
选项导致GHC将拼接转储到stderr。不幸的是,-ddump-to-file
标志不会影响拼接(我不知道这是否有更深层次的原因或仅仅是疏忽),因此您需要捕获stderr输出以保存拼接以供以后调查,
ghc -XTemplateHaskell -ddump-splices Page.hs 2> Page.dump-splices
充足的bash-like shell。
答案 1 :(得分:1)
在大型项目中,对所有模块都这样做是有问题的。 幸运的是,您可以按模块转储。 这也适用于 ghci。
您可以将此行添加到模块的顶部
{-# OPTIONS_GHC -ddump-splices #-}
它转储到标准错误。