Soy nuevo en Haskell y me gustaría poder sincronizar el tiempo de ejecución de una llamada de función determinada o un fragmento de código.Escribir una función de tiempo en Haskell
En Clojure puedo utilizar 'time ':
user=> (time (apply * (range 2 10000)))
"Elapsed time: 289.795 msecs"
2846259680917054518906413212119868890148051...
En Scala, puedo definir la función a mí mismo:
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...
¿Cómo puedo escribir el equivalente de mi función Scala o Clojure de' tiempo 'en Haskell? El System.TimeIt module que he encontrado en Hackage no es lo suficientemente general porque solo funciona si se está midiendo un cálculo de IO. Entonces timeIt(4 + 4)
no funcionaría, solo timeIt(print $ 4 + 4)
, que se vuelve molesto rápidamente. Además, realmente quiero ver cómo maneja Haskell el caso general.
¡Gracias!
La entrada de la wiki era exactamente lo que necesitaba, ¡gracias! – dimo414
One +1 va para ti :) Otro +1 va al blog de Bryan O'Sullivan :) – CoR