Haskell has this philosophy that you first think really hard about what you want to do, then write an elegant well typed program in Haskell to do it. The real world is usually much more messy, the problem and solution are not well defined, you will need to start coding just to figure out what you need to really code. So Haskell assumes well typed code can do no wrong, but often we are debugging our own mental models.