Forces its argument to be evaluated to weak head normal form when the resultant IO action is executed. It can be used to order evaluation with respect to other IO operations; its semantics are given by
> evaluate x `seq` y ==> y
> evaluate x `catch` f ==> (return $! x) `catch` f
> evaluate x >>= f ==> (return $! x) >>= f
Note: the first equation implies that (evaluate x) is not the same as (return $! x). A correct definition is
> evaluate x = (return $! x) >>= return
An IO action to check whether some value has been evaluated.
If isEvaluated returns True, evaluating it to weak-head normal form won't throw exceptions and take constant time.