分析模板Haskell

时间:2013-08-20 09:19:11

标签: haskell ghc template-haskell

我有一个TH重文件,编译大约需要30秒。我可以使用哪些技术来帮助调试Template Haskell的性能?

2 个答案:

答案 0 :(得分:2)

如果我正确理解了TH的编译流程,那么在编译时拼接时会执行普通的haskell函数。但是当然,你可以自己在运行时运行。

例如,你的TH文件中有$(foo x y ...)之类的东西。创建另一个文件并在那里调用'foo x y'但不拼接结果。然后你就可以像往常一样描绘'foo'。如果瓶颈在AST生成阶段,您将找到它。不要忘记考虑懒惰。

答案 1 :(得分:0)

从GHC 8开始,可以使用-fexternal-interpreter完成此操作。

编译定义TH函数的库并启用分析,然后编译使用GHC选项-fexternal-interpreter -opti+RTS -opti-p的拼接中使用TH函数的代码*。这应该生成一个名为ghc-iserv-prof.prof的文件。

此方法的优势在于您可以使用Q monad的全部功能。

*与TH库相同的cabal项目中的基准套件(但在不同的hs-source-dir中)也可以使用。它甚至可以与在同一个库中定义和使用的TH函数一起使用,但我认为您将在其中分析解释代码。