I put together a presentation on creating monads in Java.
+ Monad: Container that allows chaining operations, preserving semantics
+ Normally a function maps from one type to another, but the semantics may change. With a monad, operations have the same result type, so multiple operations preserve semantics.
+ Safer way to enforce semantics than as conventions, and relying on out-of-channel means such as using a lead pipe.
+ The monad pattern is all about preserving semantics across types. So first you have to decide on some semantics. This is particularly important for this pattern, otherwise you’re just creating extra work for yourself.