diff --git a/JavaScript/6-functor-ap-fp.js b/JavaScript/6-functor-ap-fp.js index f3b96c4..5b2895a 100644 --- a/JavaScript/6-functor-ap-fp.js +++ b/JavaScript/6-functor-ap-fp.js @@ -1,22 +1,14 @@ 'use strict'; -function maybe(x) { - let map = fn => (x && fn) ? fn(x) : null; - - map.ap = map2 => ( - maybe( - map( - mbValue => ( - maybe(map2)( - mbFunction => mbFunction(mbValue) - ) - ) - ) - ) - ); +const mapNull = (fn, x) => x ? fn(x) : null; +function maybe(x) { + const map = fn => maybe(mapNull(fn, x)); + map.ap = fnA => fnA(fn => mapNull(fn, x)); + map.chain = fnM => fnM(x); return map; } -maybe(5).ap(x => ++x)(console.log); -maybe(5).ap(x => x * 2).ap(x => ++x)(console.log); +maybe(5)(x => x * 2)(x => ++x)(console.log); +maybe(5)(x => x * 2).ap(maybe(x => ++x))(console.log); +maybe(5).chain(x => maybe(x * 2))(x => ++x)(console.log);