I actually was more interested in the problems with the "obvious fix"
for this, namely the "construct on first use" idiom:
int A(int a) { static int aa = a; return aa; }
int B() { return A(3); }
int C() { return A(7); }
int D() { if (today() == "Tuesday") B(); else C(); return a(0); }
What is the value of D? Notice that this is never a problem with pure
functions. The problem is that today() makes this an IO monad, and the
swearing starts again.
Dan
Bryan O'Sullivan wrote:
On Fri, Aug 29, 2008 at 4:33 PM, Dan Weston <[EMAIL PROTECTED]> wrote:
C++ faced this very issue by saying that with global data, uniqueness of
initialization is guaranteed but order of evaluation is not.
In C++ circles, this is referred to as the "static initialization
order fiasco", and it is a frequent cause of crashes that are very
difficult to debug.
http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12
I think it would be fair to say that C++ pushed this problem off to
every user of the language. I haven't seen a coherent description of
what the semantics of top-level "<-" should be, but avoidance of
widespread swearing would be at the top of my list of requirements.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe