John Meacham wrote:

>With my mdo proposal, and I think all proposals brought forth, the
>module system behaves identically to how it normally does for
>namespace control. [...] modules do not change code at all, they
>are pure syntantic sugar for deciding what names you can see.

I'm not sure I understand your mdo proposal correctly then. A lot of this debate has been over what should happen when a module has a top-level action like

   x <- putStrLn "hello"

Everyone agrees that "hello" should be printed at most once, and that if the value of x is ever demanded, it should be printed exactly once. But there's disagreement on everything else. What if I import the module containing the above declaration, but it can be proven statically that the value of x will never be demanded? What if it can't be proven statically, but it happens to be true on a particular run? If "hello" is printed even when x's value is not demanded, then import does more than bring names into scope: it also sometimes adds things to the top-level mdo. If "hello" is printed only when x's value is demanded, then import is okay but the <- construct is unsafe (though safer than unsafePerformIO).

This kind of thing turned a lot of people off to the idea of top-level initialization actions. George Russell's proposal is appealing because it neatly avoids such problems.

-- Ben

_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to