On Saturday 06 Nov 2004 1:07 pm, Keean Schupke wrote: > Just been reading arround. According to ghc docs, the noinline > pragma is in the Haskell98 report. On that basis what is wrong > with using the following to initialise these top-level constants? > > {-# NOINLINE newref #-} > newref :: IORef Int > newref = unsafePerformIO $ newIORef 0
1- It's awkward, and only safe if programmer actually remembers to use NOINLINE (compiler won't throw out an error if it's ommited). 2- It's ugly. Arguably this is mere aesthetics, but if it really is perfectly safe it should not be necessary to mention the word "unsafe" anywhere. With this solution programmers still have to "put their thinking caps on" to figure out if it's safe. It would be better if the language design and type system guaranteed it was safe. 3- According to current ghc docs, you still have to compile the module with the -fno-cse flag too. This may or may not be visible in the source code (with OPTIONS pragma). If it isn't the programmer has to look elsewhere (in makefiles or whatever) to check this flag has been used. 4- -fno-cse applies to an entire module, which will be overkill in most cases. Regards -- Adrian Hey _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell