
Dan Weston wrote:
* Static typing, which increases robustness by allowing the compiler to catch many common errors automatically.
* Type inference, which deduces types automatically and frees the programmer from writing superfluous type signatures.
* Higher order functions, polymorphism, and lazy evaluation, which enable higher levels of abstraction and more compositional, thus more reusable code.
"frees the programmer from writing superfluous type signatures" is a weak (and dubious) advantage. I very often write "superfluous" type signatures first (to be sure I know what I'm asking my program to do) and only then let Haskell check it. Then I leave it in as good documentation.
I agree with this. Perhaps Type Inference: deduces types automatically, so you don't have to clutter up your code with type declarations. You can still write type declarations for documentation purposes, and these will be automatically checked by the compiler. What I'd *really* like to see is a bunch of links on the front page leading to pages that describe the main differences between Haskell and some other language (C, Python, Java, C#, F#, ...). The easiest way to grasp what Haskell is all about is by reference to a known baseline, and programmers tend to have different baselines. e.g. the C page might start with "Haskell is a functional language", whereas the Python page might start with "Haskell is statically typed". I guess this is similar to Ian's suggestion. Cheers, Simon