Good article but it is tangential to a basic design issue.
Error handling should be done at the edges of systems rather than in the center. If you do that, it doesn't matter whether you use exceptions or error monads, you have a pure core that doesn't need to deal with error handling and a very slim area to catch errors. The mechanism you use for error handling, at that point, doesn't matter.
The problems of error handling often come from having it spread across the system and mixed with the logical flow.