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

Reply via email to