Vincenzo Ciancia wrote:
Yes, but I guess everybody would like a solution where
myRef1 = unsafePerformIO $ newIORef 0 myRef2 = unsafePerformIO $ newIORef 0
are different variables. Also, it's not true that it's perfectly safe,
I don't understant this - they would be different variables with Haskell as it stands now, and they would be different variables using the unique monad (or equivalent) - You are right that it is not perfectly safe, but only because the compiler might inline the definition. Each inlined version of the function would then refer to a different IORef.
With GHC you can use the noinline pragma to tell the compiler not to inline the function - which makes it completely safe, but compiler pragma's are implementation specific and not a satisfactory solution. So you can see what is needed is a way to tell the compiler not to inline the function that is part of the language. Its tempting to define a keyword, but this again is unsatifactory - as we would like to limit proliferation of keywords... The solution seems to be to use the type-system, and intoduce a type that implies functions returning this type should not be inlined.
Keean _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
