
Richard Uhtenwoldt
I do not think it is nice: I do not like any of the solutions Hughes considers in that paper because this problem can be handled much more simply with lexical scope and the IO monad.
can be /= should be
Just to get our bearings, let us first consider the solution that uses unsafePerformIO, which neither Hughes nor I prefer:
globalVar :: IORef Int globalVar = unsafePerformIO $ newIORef 0 foo = fff aaa bbb ccc bar = ggg xxx yyy zzz main = mmm >> nnn >> ooo
where the lines
foo = fff aaa bbb ccc bar = ggg xxx yyy zzz
stand in for a typically much larger chunk of code --the bulk of the program, let us call it.
I, personally, haven't written a program whose bulk will fit in a single file in several years, and I doubt I ever will again. So, support for separate compilation is a necessity. How do you intend to handle this? <snip> Jon Cast