It's not. Please check out Edward Kmett's comments:
http://blog.jorgenschaefer.de/2013/01/monads-for-normal-prog...
http://blog.jorgenschaefer.de/2013/01/monads-for-normal-prog...
http://blog.jorgenschaefer.de/2013/01/monads-for-normal-prog...
http://blog.jorgenschaefer.de/2013/01/monads-for-normal-prog...
(print a; print b;)print c;
and print a; (print b; print c;)
output abc. { { print a; print b; } print c; }
{ print a; { print b; print c; } }In a lazy, pure language it is of very great importance! With lazy evaluation you get no guarantees as to what order your expressions are evaluated in. Statements like "Blocks are evaluated in leftmost order" are just false in Haskell.
Monads give you the ability to sequence your I/O actions even though they are still lazily evaluated. This is why Haskell needs monads, and most other languages get by without them.