Concurrent Clean : Lazy vs. Strict

CleanはLazyな言語として知られているのですが、正格性型注釈がとても便利なので、LazyとStrictのハイブリッド言語と捉えておく方が認識としては正しいように思います。なので、下のような正格評価を期待するプログラムも、Cleanとしてはありなのではないかと思う次第です。(ここら辺、実用的な言語として、Haskellに対してはAdvantageになるのではないかと思っています)

ところで、下のようなevalを使って副作用を取り扱うのは少々危険なところもあって、関数 f が副作用を持っていたとして、

g = eval (eval (eval (f 0) (f 1)) (f 2)) (eval (f 3) (f 4))

のように書くと、正しいプログラムになるのですが、どういう順序で f が呼ばれるかは分からないことになってしまいます。
もっとも、その手のことは、純粋関数型言語だからということではなく、C言語のような正格な言語でもおこることなので、それは気にすることではないとも思います。