Concurrent Clean(とHaskell)の結合力

Clean(やHaskell)は、2項演算子よりも関数適用の方が結合力が強いので、下のような記述はエラーになる。

Start w
  ...
  # f = fwrites "aaa" +++ "bbb" +++ "ccc" f

これは、

  # f = fwrites ("aaa" +++ "bbb" +++ "ccc") f

と解釈されずに、

  # f = (fwrites "aaa") +++ "bbb" +++ "ccc" f

と解釈されるからだ。これって、たいていの場合、直感と逆なんじゃないかと思う。要するに、関数適用の結合力が高すぎると思う。

      • -

余談だが、smalltalkの場合、結合は次の順で、これの方が直感的だ。

  1. 単項メッセージ
  2. 二項メッセージ
  3. キーワードメッセージ
(book openAtPage: 1+2*3) print.

ただし、smalltalkの場合、「1+2*3」の部分は、「(1+2)*3」と解釈されてしまうという、別の意味での直感的でない解釈を含んでいるのだが・・・