In my experience the programmer workflow is (mostly):
1. You think about an algorithm
2. You (try to) code it
3. A first time to discover an error: compilation and/or syntax verification.
4. Then you test your code
Depending of the task and the fail, if 3 or 4 fail you go to 2 or 1.
With a standard language (C/C++/Java/Python/Ruby/Javascript...)
The probability of 3 to fail is very small when you are used to your language.
But the probability to fail at step 4 is High.
In haskell this is exactly the opposite, with many advantages:
Compiler error in Haskell gives you a meaningful and informative message. Most of the time, it even gives you a hint on how to solve the problem.
In the end, most of the time, once the compilation phase passed, my program worked as I expected.
Furthermore, with Haskell you can use quickcheck, which most of the time will make better test than yours. I know there is some quickcheck equivalent in other languages but I believe this is not standard.
With a standard language (C/C++/Java/Python/Ruby/Javascript...) The probability of 3 to fail is very small when you are used to your language. But the probability to fail at step 4 is High.
In haskell this is exactly the opposite, with many advantages:
Compiler error in Haskell gives you a meaningful and informative message. Most of the time, it even gives you a hint on how to solve the problem.
In the end, most of the time, once the compilation phase passed, my program worked as I expected.
Furthermore, with Haskell you can use quickcheck, which most of the time will make better test than yours. I know there is some quickcheck equivalent in other languages but I believe this is not standard.