I've run into the problem when writing an interpreter. If you're not already using a monad, you basically need to change every line of code in the program. Trivial perhaps, but quite tedious.
That said, you learn to predict where monads will be needed over time, and it's absolutely worth it to be able to use the type system to reason about side effects.
That said, you learn to predict where monads will be needed over time, and it's absolutely worth it to be able to use the type system to reason about side effects.