We can generalise this idea of being forced to handle the failure cases by saying that Haskell makes us write total functions rather than partial functions. This means that we have to handle the entire input domain rather than only part of the input domain, otherwise the compiler will complain at us and, sometimes, point-blank refuse to give us a programme.
https://www.gtf.io/musings/why-haskell


Lists advantages in the end of this video. Effect polymorphism is a powerful idea.