将"设置成本中心"附加到Monad(Haskell)的最佳方法

yon*_*ong 5 profiling haskell ghc

我正在尝试使用SCC(设置成本中心)注释来配置我的程序.找出do语句定义的monad运行需要多长时间的最佳方法是什么?(将SCC语句放入do块中是违法的.)换句话说,假设我有:

do
  x <- computeStuff
  y <- computeStuff
  return (x + y)
Run Code Online (Sandbox Code Playgroud)

如何找到两者的总执行时间computeStuffx + y(而不是Monad的施工时间)?

use*_*038 3

SCC 可以设置在任何表达式上。(do { ... })是一个有效的表达式。computeStuff和也是如此return (x + y)。这里唯一不是表达式的是x <- computeStuff. 你说你想要总时间,我理解这是指整个 do 块的总时间。但是您可以将 SCC 放置在 do 块内的任何位置;例如,以下内容是完全有效的。

computeStuff :: IO Int 
computeStuff = return 0 

test = {-# SCC "total" #-} (
  do
    x <- {-# SCC "x" #-} computeStuff
    y <- {-# SCC "y" #-} computeStuff
    return $ {-# SCC "x+y" #-} (x + y) 
  )
Run Code Online (Sandbox Code Playgroud)

  • 不过,这会描述操作的实际“执行”而不仅仅是其“构造”吗? (3认同)