16

I have a TH-heavy file which takes around 30 seconds to compile. What are some techniques I can use to help debug the performance of my Template Haskell?

4

2 回答 2

2

如果我正确理解 TH 的编译流程,则在编译时拼接时正在执行普通的 haskell 函数。当然,您可以在运行时自行运行。

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

于 2013-10-18T12:17:52.917 回答
0

从 GHC 8 开始,这可以使用-fexternal-interpreter来完成。

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

这种方法的优点是您可以使用Qmonad 的全部功能。

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

于 2017-02-19T22:31:56.190 回答