function Maybe(val) { this.val = val || null; } Maybe.prototype.bind = function (f) { return (target => target(this.val))(f); }; var x = (new Maybe(5)); var y = x .bind(v => new Maybe(v + 1)) .bind(v => new Maybe(v * 2));