Transduce
by wuct
JavaScript
var compose = (...funcs) => arg => {
return funcs.reduce((result, func) => {
return func(result)
}, arg)
}
function mapping(transform) {
return function (reduce) {
console.log('mapping reduce', reduce)
return function (result, input) {
console.log('mapping', input)
return reduce(result, transform(input));
};
};
}
function filtering(predicate) {
return function (reduce) {
console.log('filtering reduce', reduce)
return function (result, input) {
console.log('filtering', input)
return (
predicate(input) ?
reduce(result, input) :
result
);
};
};
}
var filterLessThanThreeAndIncrement = compose(
//filtering(i => i < 3),
mapping(i => i + 1),
filtering(i => i < 3)
);
function concat(a, b) {
console.log('concat', a)
return a.concat([b]);
}
var result = [1,2,3,4].reduce(filterLessThanThreeAndIncrement(concat), [])
console.log(result)