TL;DR is its a design pattern. You wont really notice the value of them until you see how they solve the same thing over and over again, such as return value checking hell in c (check the second link)
But anyway my advice is to just ignore it; you'll really need to spend some time in e.g. haskell or something else in order to get familiar with them enough to fully grok them
Agree. The best way I can describe it, is that it's a design pattern for a lightweight runtime.
You can use monads to implement exception handling, global state (without actually having global state), and async/await.
It's difficult to explain how all those features can be implemented through one generic interface. But it's easy to see how each of those things would require a "lightweight" runtime.
TL;DR is its a design pattern. You wont really notice the value of them until you see how they solve the same thing over and over again, such as return value checking hell in c (check the second link)
But anyway my advice is to just ignore it; you'll really need to spend some time in e.g. haskell or something else in order to get familiar with them enough to fully grok them