是否有一种很好的方法可以在Haskell中排除某些函数调用?
我正在加载一个字典的大型二进制转储,这需要几秒钟的时间,并完全掩盖了我感兴趣的代码。
COST CENTRE MODULE %time %alloc
read_wordlist Wordlists 93.6 98.3
solve Solver 1.3 0.0
anagrams Evaluation 0.8 1.4
[...]
作为参考,我正在加载像这样的字典
read_wordlist = do
ls <- fmap Text.lines (Text.readFile "data/straight-wordlist")
(return . Data.Set.fromList . string_read . toString . Prelude.head) ls
并且所有代码都以模块分隔(但非常香草等)。
是否有一些SCC注释的安排,这意味着我可以偷偷摸摸地完成所有开销,而不是将其计入我的整体统计数据?
答案 0 :(得分:0)
从GHC 7.8开始,您可以这样做:
import GHC.Profiling
import Control.Deepseq
main = do
stopProfTimer
wordlist <- read_wordlist
return $!! wordlist -- Ensure it is fully evaluated in the untimed section
startProfTimer
print (solve wordlist)
这似乎只是停止收集时间统计数据,而不是分配。