On the other hand, when I build more complicated (web) systems, using a framework like Phoenix, everything is pure, except controllers or custom API clients, these are the single point of interacting with impure stuff and can be guarded easily, even dying is acceptable mostly.
The point I'm trying to make is: Monads and complex/strange type systems are completely unsuited for usage through the average joe programmer, no matter how much I agree with the topic itself. But there are solutions available that allow to reap most benefits of pure FP while also allowing to be pragmatic when appropriate. I mention Elixir here because it is the single best language that fits in this description I think.