我在main中有几个函数输出信息.
我需要测量他们的执行时间.
目前它是这样做的:
start <- getCurrentTime
putStrLn $ show $ findNthMinLinear (getTestArrayOfLength (read arrlength :: Int)) 4
stop <- getCurrentTime
print $ diffUTCTime stop start
Run Code Online (Sandbox Code Playgroud)
我想将每个函数包装在一个函数中,该函数记住时间2.评估函数3.记住时间4.打印两次记忆时间之间的差异
问题是我不知道如何在不首先评估它的情况下传递函数.
我的猜测是,如果我写(<5)例如,那就是我创建一个返回函数的函数,直到我传递最终参数我才会做真正的工作吗?然后我可以写
printAndMeasure :: (a -> IO()) -> IO ()
...
printAndMeasure \x -> (getTestArrayOfLength (read arrlength :: Int)) 4
Run Code Online (Sandbox Code Playgroud)
但这是一个草率的解决方案,因为我不需要这个x,除了保持执行功能.
传递函数不会对其进行评估.所以你可以有类似的功能IO () -> IO ()并将IO动作传递给它们.当程序运行时,只main执行函数并且在需要之前不评估函数的参数(懒惰).如果您尝试对代码进行基准测试,那么最好使用基准测试库Criterion.
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |