I think the reason that a lot of people have trouble trying to understand monads is that they don't really understand type classes. If you understand type classes, then the definition of a monad is pretty obvious, although you might have to think about it for a little while to see how it relates to computation and how to use it. (Another issue is that people are introduced to the Maybe type in the context of monads and latch onto the mistaken idea that the Maybe type is the Maybe monad... just look at all the blog posts about it.)