我是新来的Haskell和我希望能够在给定时间的函数调用或代码段的运行时间。
在Clojure中,我可以用“ 时间 ”:
user=> (time (apply * (range 2 10000)))
"Elapsed time: 289.795 msecs"
2846259680917054518906413212119868890148051...
在Scala中,我可以定义自己的功能:
scala> def time[T](code : => T) = {
| val t0 = System.nanoTime : Double
| val res = code
| val t1 = System.nanoTime : Double
| println("Elapsed time " + (t1 - t0) / 1000000.0 + " msecs")
| res
| }
time: [T](=> T)T
scala> time((1 to 10000).foldLeft(1:BigInt)(_*_))
Elapsed time 274.292224 msecs
res0: BigInt = 284625968091705451...
我怎么能写我的斯卡拉功能或Clojure的哈斯克尔“时间”的相同呢? 该System.TimeIt模块 ,因为它只有在要测量的IO计算的工作,我就发现Hackage不够普遍。 所以timeIt(4 + 4)
是行不通的,只有timeIt(print $ 4 + 4)
这很烦人的快。 除此之外,我真的希望看到哈斯克尔是如何处理的一般情况。
谢谢!