Reading about monads was the last straw for me back then when I was dissatisfied with the existing async I/O frameworks. Especially I didn't like it when I needed to implement process flows, that may consist of several orderless callbacks, such as on_read, on_timeout, etc etc, where it was too easy to lose control which callback is executed after which. Or, f.ex. trying to maintain a consistent timeout between the stages. Different stuff.
Monads in particular gave me an insight about how I can force order in such a set of callbacks. As a result, I've done a yet another framework IO::Lambda, which borrows ideas heavily from functional programming (including monads too).