const compose = (...fs) => x => fs.reduceRight( (acc, f) => f(acc), x ) const mapping = f => reducing => (acc, e) => reducing(acc, f(e)) const filtering = f => reducing => (acc, e) => f(e) ? reducing(acc, e) : reducing(acc, undefined) const folding = f => x => reducing => (acc, e) => acc.length === 0 ? reducing(acc, f(x, e)) : reducing(acc, f(acc[acc.length-1], e)) const taking = n => reducing =>
