I think the problem might be also things that look like syntax to somebody who is not used to Haskell, but are just usual functions like ($) (<*>) ($!) and whatnot.
I really wish Haskell syntax was extended to allow special forms ("case", "do", etc) to be ordinary function arguments and not just infix function arguments.
This would remove a significant portion of the $ signs in Haskell programs, as so many of them are just padding for "do", "case", etc.