Monads are nothing special. "They" somehow acquired some stigma of being "difficult", which caused people to write tutorials to help others understand them. Then the proliferation of tutorials led people to believe that they are difficult to understand, which caused people to write more tutorials. And here we are today, where people avoid a programming language because they think there is some incredibly hard concept they have to master but will never be smart enough to understand.
Anyway, the Typeclassopedia is recommended reading: http://www.haskell.org/haskellwiki/Typeclassopedia
Once you understand the relationship between functions, applicative functors, monads, and arrows, everything will make sense -- they are all the same thing.
(The next issue is, "why would I want this kind of abstraction", but that's best for you to decide on your own.)