GHC -ddump-splices选项 - 模板Haskell

时间:2013-04-06 12:39:53

标签: haskell ghc template-haskell

我正在关注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

2 个答案:

答案 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 #-}

它转储到标准错误。