38 lines
941 B
JavaScript
38 lines
941 B
JavaScript
(() => {
|
|
'use strict';
|
|
|
|
// GENERIC FUNCTIONS ------------------------------------------------------
|
|
|
|
// 2 or more arguments
|
|
// curry :: Function -> Function
|
|
const curry = (f, ...args) => {
|
|
const go = xs => xs.length >= f.length ? (f.apply(null, xs)) :
|
|
function () {
|
|
return go(xs.concat(Array.from(arguments)));
|
|
};
|
|
return go([].slice.call(args, 1));
|
|
};
|
|
|
|
// map :: (a -> b) -> [a] -> [b]
|
|
const map = curry((f, xs) => xs.map(f));
|
|
|
|
// PARTIAL APPLICATION ----------------------------------------------------
|
|
const
|
|
f1 = x => x * 2,
|
|
f2 = x => x * x,
|
|
|
|
fs = map,
|
|
|
|
fsf1 = fs(f1),
|
|
fsf2 = fs(f2);
|
|
|
|
// TEST -------------------------------------------------------------------
|
|
return [
|
|
fsf1([0, 1, 2, 3]),
|
|
fsf2([0, 1, 2, 3]),
|
|
|
|
fsf1([2, 4, 6, 8]),
|
|
fsf2([2, 4, 6, 8])
|
|
];
|
|
})();
|