The eval statement accepts any type of expression as its operand. However, I predict that users would very rarely want to eval pure values and usually an eval with a non-sideeffect operand would point to a bug -- it's easy to forget the parentheses at the end of the statement. Introduce a warning to indicate this to a user.
main :: sideeffect -> ()
main = {
eval printLn "Hello world"; // Likely a bug, missing parantheses "()".
}