Haskell,测量函数的CPU时间

我需要测量如下函数的CPU时间:

t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t

问题来自Haskell的懒惰。 callTheFunction必须严格评估。 我搜索了很多,并尝试使用seq和$! 但没有成功。 我认为这应该是一个相当普遍的任务。 无论如何,我需要一些帮助。 谢谢。

更新:感谢所有帮助,特别是@FUZxxl。 它让我想起了WHNF(弱首标准形式)和正常形式之间的区别。 Haskell / Laziness有助于理解Haskell的懒惰评估。

我需要的是多一步评估。 无论如何$! 或评估这两个作品,只要WHNF需要res:

t <- getCPUTime
res <- callTheFunction input
evaluate res  OR  return $! res
t' <- getCPUTime
print $ t' - t

使用Control.Exception的函数evaluate :: a -> IO a 。 当相应的IO动作被执行时,它将它的参数评估为WHNF。 你必须确保WHNF对于你的功能来说是足够的。


如果你是基准测试,那么你应该使用标准。 否则使用NFData(rnf)和爆炸模式来强制评估。


如果您正在尝试做基准测试,请使用Hackage上的优秀标准库。

链接地址: http://www.djcxy.com/p/7437.html

上一篇: Haskell, Measuring CPU time of a function

下一篇: Are monad laws enforced in Haskell?