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

时间:2015-03-18 20:58:35

标签: haskell profiling ghc

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

do
  x <- computeStuff
  y <- computeStuff
  return (x + y)

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

1 个答案:

答案 0 :(得分:3)

可以在任何表达式上设置SCC。 (do { ... })是一个有效的表达式。 computeStuffreturn (x + y)也是如此。这里唯一没有表达的是x <- computeStuff。你说你想要总时间,我理解这意味着整个时间块的总时间。但是你可以把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) 
  )