A monad is an object whose methods return:
either itself if that method is not meant to change the object's properties, like getters;
or a new copy of original monad object with changed properties if that method is meant to change object properties, like setters.