
Seth Kurtzberg wrote:
On Tue, 06 Mar 2007 12:03:05 -0800 David Brown
wrote: I've noticed quite a few pages referencing constructs such as:
var :: MVar ([Foo]) var = unsafePerformIO (newMVar ([]))
and the likes. Is there a danger of different uses of 'var' getting new MVars instead of all sharing one.
Having a reliable way to create a piece of global state would be very convenient.
This operation is unsafe by definition. I use it extensively, without problems. The "unsafe" in the name reminds you that there are situations for which the function is inappropriate, but all of my deployed commercial programs have functionality of this sort. Understand the risk, but don't hesitate to use it.
Do you do anything to keep 'var' from getting inlined? I can envision a case where the code would be inlined, and then each use would get a separate MVar. Thanks, Dave