Wolfgang Thaller wrote:

>
> 2) Evaluation order.
>
> That's what everyone has been fighting about.
> [...]
>
>> The basic idea is that your entire program behaves as if in a giant
>> 'mdo' block, ordered in module dependency order.
>
>
>
> What is module dependency order? There's no such thing when there are > circular dependencies, and when there aren't any, it might still
> depend on the order of import directives, which is probably not
> something I want program semantics to depend on.
> I feel that In a large program, you'll probably get more surprises
> from this.



The Modula-3 language specification gives one reasonable definition:

===Begin excerpt.
From http://research.compaq.com/SRC/m3defn/html/complete.html#idx.148 :

2.5.6 Initialization

The order of execution of the modules in a program is constrained by the following rule:

If module M depends on module N and N does not depend on M, then N's body will be executed before M's body, where:

A module M depends on a module N if M uses an interface that N exports or if M depends on a module that depends on N.
A module M uses an interface I if M imports or exports I or if M uses an interface that (directly or indirectly) imports I.
Except for this constraint, the order of execution is implementation-dependent.


===End excerpt.

According to the above constraint, the initialization order is implementation-defined in the case of circular dependencies.

Note, too, that the order of import directives in a module does not affect the partial order imposed by the above constraint.

(The above was delayed by the haskell mailing list anti-spam measures. Anyway, looks like the above rule is entirely consistent with Simon Marlow's description of what ghc already implements for initialization order.)

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

Reply via email to