2015-03-18 10 views
5

我試圖用SCC(設置成本中心)註釋來剖析我的程序。找出由do語句定義的monad運行需要多長時間的最佳方法是什麼? (這是違法的把一個SCC聲明在DO塊。)換句話說,假設我有:將「設置成本中心」附加到Monad(Haskell)的最佳方式

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

如何找到兩個computeStuffx + y(而不是總執行時間Monad的施工時間)?

回答

3

可以在任何表達式上設置SCC。 (do { ... })是一個有效的表達式。所以是computeStuffreturn (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) 
) 
+3

雖然這會描述操作的實際*執行*而不僅僅是它的*構造嗎? – 2015-03-19 00:06:39

相關問題