我正在尝试使用SCC(设置成本中心)注释来配置我的程序。找出do语句定义的monad运行需要多长时间的最佳方法是什么? (将SCC语句放入do块中是违法的。)换句话说,假设我有:
do
x <- computeStuff
y <- computeStuff
return (x + y)
如何找到两个computeStuff
和x + y
的总执行时间(而不是Monad的施工时间)?
答案 0 :(得分:3)
可以在任何表达式上设置SCC。 (do { ... })
是一个有效的表达式。 computeStuff
和return (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)
)