* Infix semicolons instead of paired delimiters to denote code blocks. These cause shift-reduce errors and make indentation unintuitive.
* Implicit currying turning what should be obvious argument count errors into type errors on unrelated lines.
* Implicit currying making parameter order overly significant. This drives languages to introduce infix pipe operators with unintuitive precedence and to bikeshed forward vs backward piping. This could all be done away with by having a dedicated partial application syntax.
* Postfix, of all things, for type constructors. Except for the ones that are, sigh, infix again.
* Inscrutable type signatures on higher-order functions, largely as a result of the above and of the convention of single-letter type variables.
* Infix semicolons instead of paired delimiters to denote code blocks. These cause shift-reduce errors and make indentation unintuitive.
* Implicit currying turning what should be obvious argument count errors into type errors on unrelated lines.
* Implicit currying making parameter order overly significant. This drives languages to introduce infix pipe operators with unintuitive precedence and to bikeshed forward vs backward piping. This could all be done away with by having a dedicated partial application syntax.
* Postfix, of all things, for type constructors. Except for the ones that are, sigh, infix again.
* Inscrutable type signatures on higher-order functions, largely as a result of the above and of the convention of single-letter type variables.