Haskell函数的执行时间

有没有一个简单的方法来计算Haskell函数执行的时间?

最简单的事情就是:set +sghci :set +s ,然后你可以看到你运行的任何东西的执行时间,以及内存使用情况。

criterion包是专门做好这个的。

Criterion.Measurement中包含函数执行时间基准

例如,如果我想捕获someIOFunction :: IO ()

 import Criterion.Measurement main = secs <$> time_ someIOFunction >>= print 

标准是最复杂的方法,虽然我觉得很难开始,它似乎针对的基准程序。 我想计算执行的时间,并在程序中使用这些数据,似乎并没有解决这个问题,至less现在并不明显。

时间这是非常简单的,做我想要的,除了它不处理纯粹的function。 返回一个纯函数的时间是分配时间(AFAIK),即使使用seq,也很难得到你想要的。

什么是为我工作是基于TimeIt的。

 import System.TimeIt timeItTPure :: (a -> ()) -> a -> IO (Double,a) timeItTPure pa = timeItT $ pa `seq` return a 

在这个时候,p是负责评估一个纯粹的计算结果的函数,a,为了得到好的评估时间。 也许这是一个简单的模式匹配,也许它是在计算一个列表的长度,也许它是序列中的每一个元素,也许是一个深度,等等。

seq的使用是棘手的。 请注意,下面的function不按照需要执行。 哈斯克尔是一个神秘的东西。

 badTimeItTPure a = timeItT . return $ seq (pa) a