This is analogous to correlated subqueries in SQL, which also tax my brain.
I guess what I find weird about \x -> (\y -> x+y) is:
1. the syntax suggests to me that the definition of \y is complete within the parentheses, but it has a dependency that reaches outside the parens and raises questions about the limits of scope; and (related)
2. in other programming contexts one learns to read parentheses from innermost to outermost. But here we need to read it left to right.
I guess it's just going to take a while to learn to think like the Haskell parser.
Another example that twists my C/C++ programmer's brain: we can define tail as
mytail (_:xs) = xs
Very logical, but this assumes that the language is able to deconstruct the list input to understand that it can be thought of as a single element added to a list. Cool that the language can do that, but not obvious, and leaves me wondering what other sorts
of deconstructions it is capable of making that are not obvious. Can I do drop2 (b:(a:xs)) = b:xs to drop the second item? How will we know the limits of such constructs without just trial and error? I'm sure this will become more clear as we go on.
re: (-1) 3 --- agreed that the problem is that -1 can be read (and apparently IS read) as negative 1. Surprising then that we can't use ((-)1) 3 or something analogous. The flip business seems very convoluted. But I suppose this is a minor syntactic quirk
originating from the overloaded use of the - symbol, and since it only impacts a syntax shortcut, it's probably not worth worrying too much about.