Я прочитал эту статью, но не понял последний раздел.
Автор говорит, что Monad дает нам чувствительность к контексту, но можно добиться того же результата, используя только аппликативный экземпляр:
let maybeAge = (\futureYear birthYear -> if futureYear < birthYear
then yearDiff birthYear futureYear
else yearDiff futureYear birthYear) <$> (readMay futureYearString) <*> (readMay birthYearString)
Это ужасно, без do-syntax, но кроме того, я не понимаю, зачем нам нужна Monad. Может ли кто-нибудь прояснить это для меня?