> because of lazy evaluation, ..., monads
Lazy evaluation as a default seems to imply the necessity of something like monads. The question is whether lazily evaluating everything is a good idea; I haven't seen many problems in the wild that are referentially transparent in nature (i.e. purely algorithmic).
Based on the whole monad & monoidal wankery I'm seeing, I'm inclined to think that it's not (yet). You shouldn't try to be too clever when programming, because it'll come back and bite you when maintaining.
Haskell is a research language, and probably should remain there until they hash all these issues out -- in a simple and orthogonal manner.