Haskellで関数が左結合だということ

print filter f xs

とした時に、なんでエラーが出るかってわけ。

a b c d

と並んでいるものは、関数適用において左結合であるHaskellによれば

((a b) c) d

と解釈される。

よって関数aにbを食わせてcを食わせてdを食わせた結果何かが起こるので、aの型は

a :: b -> c -> d -> e

となる。だから上の例だとエラーが起きる

Haskellでは常にカリー化されていることと、括弧を省略できることで混乱していたけれど、括弧をちゃんとつければまあ多少は、ね?