评估任何(... - > IO())函数的函数

时间:2012-11-02 13:35:50

标签: haskell lambda

我有主要输出信息的几个函数。

我需要来衡量他们的执行时间。

目前它是这样做的:

  start <- getCurrentTime
  putStrLn $ show $ findNthMinLinear (getTestArrayOfLength (read arrlength :: Int)) 4
  stop <- getCurrentTime
  print $ diffUTCTime stop start

我想将每个函数包装在1.记住时间的函数中2.评估函数3.记住时间4.打印两次记忆时间之间的差异

问题是我不知道如何在不先评估它的情况下传递函数。

我的猜测是,如果我写(例如&lt; 5),那就是我创建一个返回函数的函数,在我传递最终参数之前我不会做真正的工作吗? 然后我可以写

printAndMeasure :: (a -> IO()) -> IO ()
...
printAndMeasure \x -> (getTestArrayOfLength (read arrlength :: Int)) 4

但这是一个草率的解决方案,因为我不需要这个x而不是保持执行功能。

1 个答案:

答案 0 :(得分:6)

传递函数不会对其进行评估。因此,您可以使用IO () -> IO ()之类的功能并将IO个动作传递给他们。当程序运行时,只执行main函数,并且在需要之前不评估函数的参数(懒惰)。 如果您尝试对代码进行基准测试,那么最好使用Criterion之类的基准测试库。