[Haskell-cafe] Top-level TVars
Simon Marlow
simonmar at microsoft.com
Wed Dec 14 09:17:17 EST 2005
On 14 December 2005 10:11, Joel Reymont wrote:
> I'm a bit lost in the discussion. Why do I need -fno-cse and how do I
> seq at the top-level?
>
> On Dec 14, 2005, at 10:05 AM, Tomasz Zielonka wrote:
>
>> On Wed, Dec 14, 2005 at 10:03:42AM -0000, Simon Marlow wrote:
>>> Well sure, but it's only a temporary problem. And you also have to
>>> tell them to use {-# NOINLINE #-} and -fno-cse :-)
>>
>> -fno-cse is also neccesary? Oops, I didn't know that. Can I simply
>> place it in {-# OPTIONS -fno-cse #-} ?
Suppose you create two top-level IORefs with the same type, like this:
var1 = unsafePerformIO $ newIORef 0
var2 = unsafePerformIO $ newIORef 0
GHC's CSE optimisation will common these up - after all, it's the same
expression, so it must yield the same result, right?
To turn this off, we use -fno-cse. It's good practice to use -fno-cse
whenever you use top-level mutable objects of any kind. You can put it
in the source file:
{-# OPTIONS_GHC -fno-cse #-}
at the top of your file.
Cheers,
Simon
More information about the Haskell-Cafe
mailing list