Haskell, Измерение процессорного времени функции

Мне нужно измерить процессорное время функции, подобной следующей:

t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t

Проблема связана с ленивостью Haskell. callTheFunction должен строго оцениваться. Я много искал и пробовал использовать seq и $! но безуспешно. Думаю, это должна быть довольно распространенная задача. В любом случае, мне нужна помощь. Спасибо.

Обновление: Спасибо за помощь, особенно @FUZxxl. Это напоминает мне разницу между WHNF (нормальная форма слабой головы) и нормальной формой. Haskell / Лень помогает понять ленивую оценку Haskell.

Мне нужен был еще один этап оценки. В любом случае $! или оцените обе работы, если для res требуется только WHNF:

t <- getCPUTime
res <- callTheFunction input
evaluate res  OR  return $! res
t' <- getCPUTime
print $ t' - t

9
задан h--n 22 March 2011 в 02:28
поделиться