What advantage does Monad give us over an Applicative?
I've read this article , but didn't understand last section. The author says that Monad gives us context sensitivity, but it's possible to achieve the same result using only an Applicative instance: let maybeAge = (\futureYear birthYear -> if futureYear < birthYear then yearDiff birthYear futureYear else yearDiff futureYear birthYear) <$> (readMay futureYearString) <*> (readMay birthYearString) It's uglier for sure without do-syntax, but beside that I don't see why we need Monad. Can anyone clear this up for me? Here's a couple of functions that use the Monad interface. ifM :: Monad m => m