Show HN: Learn Functional Programming Using Haskell
Haskell is such a distinct mix of features that make it great to use once you know them but somewhat difficult to learn from scratch.<p>One big fat clue that I wish I had been given when I was starting to try to figure it out on my own back in the 90's is that Haskell is kind of loaded up with syntactic sugar, beneath which is a relatively small core language that might be an easier point of entry into the language.<p>To be specific: infix operators, sections, multi-argument functions, partial application, 'where' clauses, multiple definitions of the same function with different patterns, implicit braces and semicolons inferred from layout, 'do' statements, if/then/else, [lists] -- all of these, and probably more, are great to use, but they all boil down to something like<p><pre><code>  func = \arg -> let { ... } in case arg of { pat | guards -> f x y; ... }
</code></pre>
and perhaps fully grokking these essential constructs before moving on to using them indirectly through all the layers of pretty syntax would have helped me understand all those features better.<p>ADDENDUM to forestall my inevitable hog-piling by pedants: yes, I know that 'let' isn't strictly essential, and I neglected to mention record fields, record updates, type classes, &c.  Sorry.  And I know that the Haskell standards have always defined higher-level constructs in terms of a core language.  My point is that, at least for me, Haskell might have been easier had I been exposed to just that core language at first.