@shapr To those beginning Haskell development monads are essentially how you write imperative code in this pure functional language when you need to. Though more experienced Haskellers take exception to that description because it has more uses than that.
The interesting thing here is Haskell's "msum" function. This lets you combine multiple request handlers such that when the first fails it fallsback to the next and so on. Take a look at the link for examples.