necesito para medir el tiempo de CPU de una función como la siguiente:Haskell, Medición de tiempo de CPU de una función
t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t
El problema viene de la pereza de Haskell. callTheFunction debe ser evaluado estrictamente. ¡He buscado mucho y he tratado de usar seq y $! pero sin éxito. Creo que esta debería ser una tarea bastante común. De todos modos, necesito ayuda. Gracias.
Actualización: Gracias por toda la ayuda, especialmente @FUZxxl. Me recuerda la diferencia entre WHNF (forma normal de cabeza débil) y forma normal. Haskell/Laziness ayuda a comprender la evaluación perezosa de Haskell.
Lo que necesitaba era una evaluación más. De todos modos $! o evaluar tanto funciona siempre y cuando solamente se necesita WHNF de res:
t <- getCPUTime
res <- callTheFunction input
evaluate res OR return $! res
t' <- getCPUTime
print $ t' - t
Esto no soluciona su problema de rigor (use evaluar para eso) pero para los tiempos rápidos y sucios (es decir, más simple que el criterio) puede simplemente usar el paquete timeIt: http: //hackage.haskell. org/paquete/timeit – sclv