I'm using Haskell because I'm more productive in it than in any other language. The code is elegant and concise, and is of high quality.
When I want to make sweeping changes, I can trust the compiler to remind me everything that needs to be fixed.
I barely have to test anything, because if it compiles, more than 90% of the time, it will Just Work. When I do test, Haskell makes testing far easier, with packages like QuickCheck and its rich types.
I don't write performance intensive code, but when I wrote this kind of code in Python, I still had to battle with performance problems a lot. In Haskell, performance is great out of the box and I rarely have to deal with that.
Haskell gives me useful guarantees that make mechanical refactorings so much easier, leading to more code quality.
Haskell is lazy allowing me to write more modular code, and enabling a lot of useful techniques (See [1]).
Haskell gives me access to state of the art techniques in various fields (accelerate, safe transactional memory, nested data parallelism, vector and list fusion, ...).
Haskell expands my mind, and makes me understand code and computation more deeply.
There are so many reasons to use Haskell...
There are a few reasons not to use Haskell, but the most major one, in my opinion, is the initial difficulty of learning it.
Overcoming that difficulty is well worth it for career programmers, in my opinion.
Parsec was Haskell's 'killer app' for me, but I tend to do most tasks in it now that involve some kind of data processing. Economical syntax, strong support for function composition, pattern matching, and type classes are the main draws for me. I have also learned to appreciate enforced purity and the abundance of operators, two of the biggest hurdles coming from stateful, imperative, mainstream languages. I prefer a development style in which small, single-purpose 'components' can be built up in the REPL and plugged together. Haskell is very well suited to this. Especially once I realized the GHC compiler was really telling me useful things and not just trying to piss me off. I have a love/hate relationship with lazy evaluation.
Nine times out of ten, when I'm done using Parsec I find myself wishing I were using Happy and Alex instead. Parsec seems to be powerful and liberating to a lot of people but I guess I had lex and yacc drilled into me hard enough that I haven't managed to let go yet.
If you dont know anything about haskell (orat leastanother similar language). Then do yorself a favour and go learn more about it :)
If you already know what haskell is about, id say its killer feature is the rich type system. Not only is it very complete (including support for generics, overloading and much more) but the ecosystem as a whole is oriented towards static safety guarantees and having the compiler help you avoi errors. For example, option types make so you never ever get a nullpointerexception and after you get the hang of it you can also start encoding other proprties of your own. As a bonus, the language itself is quite clean and pretty, something I find surprising for a language designed by comitee.
I'm obsessed with programming languages and code beauty. I enjoy the pseudo-mathematical confidence Haskell gives me. There are several languages on my list, but I'm more productive and currently more satisfied with the results with Haskell than any of the others. I recommend giving it a look if you want to see something different.
I really would like to use haskell (ghc) even more but the lack of 64 support on windows is a realworld troublemaker. When your doing anything with large dataset you must constantly think about what will happen when lazyness and garbage collector kicks you in the face because you hit the classic win32 bit 2GB upper limit. Profiling and watch for spaceleaks will save you but you wouldn't even be doing this in a proper 64bits environment.
Ah, fwiw I haven't used Windows since 2007 so this wasn't on my radar, but I do hope they get that fixed. Or maybe the Haskell team is intentionally dragging their feet there, in order to "avoid success at all costs"...
When I want to make sweeping changes, I can trust the compiler to remind me everything that needs to be fixed.
I barely have to test anything, because if it compiles, more than 90% of the time, it will Just Work. When I do test, Haskell makes testing far easier, with packages like QuickCheck and its rich types.
I don't write performance intensive code, but when I wrote this kind of code in Python, I still had to battle with performance problems a lot. In Haskell, performance is great out of the box and I rarely have to deal with that.
Haskell gives me useful guarantees that make mechanical refactorings so much easier, leading to more code quality.
Haskell is lazy allowing me to write more modular code, and enabling a lot of useful techniques (See [1]).
Haskell gives me access to state of the art techniques in various fields (accelerate, safe transactional memory, nested data parallelism, vector and list fusion, ...).
Haskell expands my mind, and makes me understand code and computation more deeply.
There are so many reasons to use Haskell...
There are a few reasons not to use Haskell, but the most major one, in my opinion, is the initial difficulty of learning it.
Overcoming that difficulty is well worth it for career programmers, in my opinion.
[1] http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pd...