print filter f xs
とした時に、なんでエラーが出るかってわけ。
a b c d
と並んでいるものは、関数適用において左結合であるHaskellによれば
((a b) c) d
と解釈される。
よって関数aにbを食わせてcを食わせてdを食わせた結果何かが起こるので、aの型は
a :: b -> c -> d -> e
となる。だから上の例だとエラーが起きる
Haskellでは常にカリー化されていることと、括弧を省略できることで混乱していたけれど、括弧をちゃんとつければまあ多少は、ね?