I certainly agree with Mark that in the interactive system one wants
to "cache" top-level CAF's -- I use it myself in teaching laziness.
However, it is to me not at all clear what a value of type IO () is.
The type is in the Haskell report stated to be "abstract"; there are
some primitive operations and an instance declaration placing it in
the Monad class. From this is is not at all apparent to the user that
evaluating a top-level binding of type IO () will lead to constructing
and caching an object such as
main = putStr "" >> putStr "" >> putStr "" >> mapM_ putStr (repeat "")
corresponding to the view that >> is a constructor.
Now, with the (welcome) existence of runhugs, it is a pity that some
nice programming examples will lead to a crash due to heap exhaustion
for difficult-to-understand reasons.
Best regards
Bj�rn