[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.


More information about the Haskell-Cafe mailing list