All a monad is is typechecking. It's an abstraction barrier that enforces a wall between one part of your program and another. That's, like, the only thing I can tell that it is. It's like what you already have in C++ all the time. It's literally nothing.
― j_blow,