Вот выдержка из документации оценка
:
Control.Exception.Base.evaluate :: a -> IO a
оценка x
это не то же самое, что
возврат $! Икс
Правильное определение:
evaluate x = (return $! x) >>= return
(источник)
Кажется, они имеют одно и то же значение. В чем разница между этими двумя определениями?