
Ganesh Sittampalam wrote:
By global scope, I mean the largest execution scope an IORef created by newIORef can have. Each top-level IORef declaration should create an IORef at most once in this scope.
That's a reasonable definition, if by "execution scope" you mean your previous definition of "where the IORef can be directly used". But it's not process scope; two independent Haskell libraries in the same process can no more share IORefs than two separate Haskell processes.
[what I meant by global scope above was "the entire world"]
OK. Let's call it "top-level scope". Haskell naturally defines such a thing, regardless of processes and processors. Each top-level <- would run at most once in top-level scope. If you had two Haskell runtimes call by C code, each would have its own memory allocator and GC; IORefs, Uniques and thunks cannot be shared between them; and each would have its own top-level scope, even though they're in the same process. -- Ashley Yakeley