h--*_*--n 9 haskell lazy-evaluation
我需要测量一个函数的CPU时间,如下所示:
t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t
问题来自Haskell的懒惰.必须严格评估callTheFunction.我搜索了很多,并尝试使用seq和$!但没有成功.我认为这应该是一项非常普遍的任务.无论如何,我需要一些帮助.谢谢.
更新: 感谢您的所有帮助,尤其是@FUZxxl.它让我想起WHNF(弱头标准形式)和标准形式之间的区别. Haskell/Laziness 有助于理解Haskell的惰性评估.
我需要的是再做一步评估.无论如何$!只要只需要WHNF,就可以评估两种工作:
t <- getCPUTime
res <- callTheFunction input
evaluate res  OR  return $! res
t' <- getCPUTime
print $ t' - t
使用evaluate :: a -> IO a来自的功能Control.Exception.当执行相应的IO动作时,它会评估其对WHNF的参数.你必须确保WHNF足以满足你的功能.