Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分析模板Haskell_Haskell_Ghc_Template Haskell - Fatal编程技术网

分析模板Haskell

分析模板Haskell,haskell,ghc,template-haskell,Haskell,Ghc,Template Haskell,我有一个很重的文件,大约需要30秒来编译。我可以使用哪些技术来帮助调试我的模板Haskell的性能?如果我正确理解TH的编译流程,则在编译时拼接时会执行普通的Haskell函数。当然,您可以在运行时自己运行 例如,您的TH重载文件中有类似$(foo x y…)的内容。创建另一个文件并在那里调用'foo x y',但不要拼接结果。然后你就可以像往常一样分析‘foo’。如果瓶颈在AST生成阶段,您将找到它。不要忘记考虑懒惰。 < P> > GHC 8,这可以用./P>来完成。 编译定义启用了评测功能

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

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


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

< P> > GHC 8,这可以用./P>来完成。 编译定义启用了评测功能的TH函数的库,然后编译在带有GHC选项的拼接中使用TH函数的代码*
-fexternal解释器-opti+RTS-opti-p
。这将生成一个名为
ghc-iserv-prof.prof
的文件

这种方法的优点是可以使用
Q
monad的全部功能


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

我实际上发现,在所述文件中,TH立即运行,所有时间都由GHC进行实例解析。不过仍然对这个问题感兴趣。也许你可以为一些在运行时在IO中运行的monad创建一个实例,然后你可以使用标准的评测工具。monad可以有一个具体化信息和位置的列表(可能由TH生成),这样您仍然可以使用具体化。