関数呼び出し: Haskell, OCaml, Concurrent Clean

関数呼び出しの引数の取り扱いというのは、eagerとlazyの2種類あるわけですが、たいていの言語はどちらかだけを採用しているものなわけです。たとえばOCamlはeagerでHaskellはlazyです。
で、しかしそれだけでは不便なので、その逆を実現する機構をもっていたりします。たとえば、OCamlはlazyで、Haskellはseqとかがあります。しかし、これには限界があって、たとえばOCamlとかだと、http://d.hatena.ne.jp/KeisukeNakano/20060920/1158735496のようなことになったりします。Haskellの方はよく知らないですが、関数呼び出しの際に無駄なThunkを生成してしまうことになるのではないでしょうか。
Cleanの場合、引数の評価は、eagerとlazyの2種類の両方をサポートしているので、lazyやseqのような補助的な機構は使いません。そのため、煩雑なlazyを書く必要もなく、無駄なThunkが生成されることもないのです。