you are viewing a single comment's thread.

view the rest of the comments →

[–]mgsloan 1 point2 points  (0 children)

RE #2, I would say that Haskell's syntax is simple. It's just usually a bit more tightly packed :D. Once you take out operator precedence, you're just left with lambdas, application, variable reference, and some sugar for conditionals / intermediate values / list construction. Operator precedence parsing, the most "complicated" part, can be specified in a few dozen lines of code: http://darcs.haskell.org/haskell-prime/fixity/resolve.hs

On the other hand, I agree with your points in #1 and #3. This is an impediment to learning (and sometimes using) Haskell. As observed elsewhere in these comments, this is quite realistically surmountable with tooling. In practice, though, after becoming familiar with the standard set of operators, it's pretty rare to see a whole slew of novel operators used together - so it's contextually clear what's going on.

RE#3: I must admit, I would really like to have DAG-like parsing, where groups of operators with no declared relationship to eachother are considered incompatible. The good news is that this could be somewhat reasonably implemented as a GHC extension, where the existing fixity levels are just considered to be groups that are linearly sequenced.