I need to measure CPU time of a function like following:
t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t
The problem comes from the laziness of Haskell. callTheFunction must be strictly evaluated. I've searched a lot and tried to use seq and $! but without success. I think this should be a quite common task. Anyway, I need some help. Thanks.
Update: Thanks for all the help, especially @FUZxxl. It reminds me the difference between WHNF (Weak Head Normal Form) and Normal Form. Haskell/Laziness helps understand the lazy evaluation of Haskell.
What I needed is one more step evaluation. Anyway $! or evaluate both works as long as only WHNF is needed for res:
t <- getCPUTime
res <- callTheFunction input
evaluate res OR return $! res
t' <- getCPUTime
print $ t' - t