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