Im new, чтобы Haskell и Id хотели иметь возможность запускать время выполнения заданного вызова функции или фрагмента кода.
В Clojure я могу использовать time:
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...
Как я могу записать эквивалент моей функции Scala или Clojure "в Haskell? Модуль System.TimeIt, который я нашел в Hackage, недостаточно общий, потому что он работает только при измерении вычисления ввода-вывода. Таким образом, timeIt(4 + 4)
не работает, только timeIt(print $ 4 + 4)
, что быстро раздражает. Кроме того, я действительно хочу видеть, как Haskell обрабатывает общий случай.
Спасибо!