Haskell 教授报告中的(…)是什么意思?

Haskell 教授报告中的(…)是什么意思?,haskell,profiling,Haskell,Profiling,我正在用-prof编译Haskell程序,寻找优化机会,但我不知道如何解释包含省略号的成本中心。什么是过滤器。。。。还有jankRoulette选择 我用:$ghc-make-rtsopts-prof-auto-all-main.hs&./main+RTS-p&&cat-main.prof生成了它 函数过滤器在where子句中有几个定义,如下所示: filter a b = blahblah where foo = bar bar = baz baz = bing 但这

我正在用-prof编译Haskell程序,寻找优化机会,但我不知道如何解释包含省略号的成本中心。什么是过滤器。。。。还有jankRoulette选择

我用:$ghc-make-rtsopts-prof-auto-all-main.hs&./main+RTS-p&&cat-main.prof生成了它

函数过滤器在where子句中有几个定义,如下所示:

filter a b = blahblah where
    foo = bar
    bar = baz
    baz = bing
但这些都显示为filter.foo、filter.bar等

我原以为它们可能是嵌套的let表达式,但jankRoulette.select没有。我已经在大多数成本中心前面添加了SCC指令,没有任何成本中心上升到顶部

由于大部分时间都花在过滤器上,我想知道这是什么:

TL;DR:GHC在let绑定中进行模式匹配时生成这个函数,比如let x,y=c。评估c的成本由。。。成本中心,因为它没有唯一的名称

那我是怎么发现的? 对…的赞美。。。在GHC源代码中,可以从compiler/deSugar/Coverage.hs找到以下内容:

-TODO:重新审视这一点 addTickLHsBind L位置pat@PatBind{pat_lhs=lhs,pat_rhs=rhs}=do 让name=。。。
fvs,rhs'我喜欢并完全赞同那里的TODO评论:P.推论:为了消除成本中心的歧义,在模式匹配之前命名值,比如x:u=foo,其中foo=reverse[1..10000000]。回答得很好,本诺夫斯,非常感谢!正如bennofs引用的代码中的TODO注释所建议的,GHC分析器报告和编译器输出的几乎所有内容都应始终伴随GHC-version的结果。感谢提醒!对于子孙后代来说,我碰巧正在运行光荣的格拉斯哥哈斯克尔编译系统,版本7.8.1。
filter a b = blahblah where
    foo = bar
    bar = baz
    baz = bing
x :: Int
(x:_) = reverse [1..1000000000]

main :: IO ()
main = print x
COST CENTRE MODULE                  no.     entries  %time %alloc   %time 

%alloc
MAIN        MAIN                     42           0    0.0    0.0   100.0  100.0
 CAF        Main                     83           0    0.0    0.0   100.0  100.0
  (...)     Main                     86           1  100.0  100.0   100.0  100.0
  x         Main                     85           1    0.0    0.0     0.0    0.0
  main      Main                     84           1    0.0    0.0     0.0    0.0