/* ARRAY METHOD COMPOSITION */ function curry(util) { return fn => list => util(fn,list); } function pipe(...fns) { return v => fns.reduce( (v,fn) => fn(v), v ); } var map = curry(function map(fn,list){ return list.map(fn); }); var filter = curry(function filter(fn,list){ return list.filter(fn); }); // **************************** var f = pipe( map(v => v + 1), map(v => v * 2), map(v => v + 3), filter(v => v % 3 == 0), map(v => "v: " + v) ); f([0,1,2,3,4,5,6,7,8,9]); // [ "v: 9", "v: 15", "v: 21" ]