var Maybe = function(x) {
return {
bind: function(f) {
return (x === null) ? null : f(x);
}
};
};
var findSomething = function() { return Maybe(3); };
var someFailure = function() { return Maybe(null); };
var findSomethingElse = function(x) { return Maybe(x+5); };
var lookup = function(x,y) { return Maybe(x*y); };
findSomething().bind(function(x) {
return findSomethingElse(x).bind(function(y) {
return someFailure().bind(function() {
return lookup(x,y).bind(function(z) {
print('To sie nie wykona');
});
});
});
});
findSomething().bind(function(x) {
return findSomethingElse(x).bind(function(y) {
return lookup(x,y).bind(function(z) {
print('val = ' + z);
});
});
});
dmFyIE1heWJlID0gZnVuY3Rpb24oeCkgewogICAgcmV0dXJuIHsKICAgICAgICBiaW5kOiBmdW5jdGlvbihmKSB7CiAgICAgICAgICAgIHJldHVybiAoeCA9PT0gbnVsbCkgPyBudWxsIDogZih4KTsKICAgICAgICB9CiAgICB9Owp9OwoKdmFyIGZpbmRTb21ldGhpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIE1heWJlKDMpOyB9Owp2YXIgc29tZUZhaWx1cmUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIE1heWJlKG51bGwpOyB9Owp2YXIgZmluZFNvbWV0aGluZ0Vsc2UgPSBmdW5jdGlvbih4KSB7IHJldHVybiBNYXliZSh4KzUpOyB9Owp2YXIgbG9va3VwID0gZnVuY3Rpb24oeCx5KSB7IHJldHVybiBNYXliZSh4KnkpOyB9OwoKZmluZFNvbWV0aGluZygpLmJpbmQoZnVuY3Rpb24oeCkgewogICAgcmV0dXJuIGZpbmRTb21ldGhpbmdFbHNlKHgpLmJpbmQoZnVuY3Rpb24oeSkgewogICAgICAgIHJldHVybiBzb21lRmFpbHVyZSgpLmJpbmQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBsb29rdXAoeCx5KS5iaW5kKGZ1bmN0aW9uKHopIHsKICAgICAgICAgICAgICAgIHByaW50KCdUbyBzaWUgbmllIHd5a29uYScpOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0pOwp9KTsKCmZpbmRTb21ldGhpbmcoKS5iaW5kKGZ1bmN0aW9uKHgpIHsKICAgIHJldHVybiBmaW5kU29tZXRoaW5nRWxzZSh4KS5iaW5kKGZ1bmN0aW9uKHkpIHsKICAgICAgICByZXR1cm4gbG9va3VwKHgseSkuYmluZChmdW5jdGlvbih6KSB7CiAgICAgICAgICAgIHByaW50KCd2YWwgPSAnICsgeik7CiAgICAgICAgfSk7CiAgICB9KTsKfSk7Cg==