RosettaCodeData/Task/Function-composition/JavaScript/function-composition-4.js

21 lines
408 B
JavaScript

(() => {
'use strict';
// compose :: [(a -> a)] -> (a -> a)
const compose = (...fs) =>
x => fs.reduceRight(
(a, f) => f(a),
x
);
// Test a composition of 3 functions (right to left)
const
sqrt = Math.sqrt,
succ = x => x + 1,
half = x => x / 2;
return compose(half, succ, sqrt)(5);
// --> 1.618033988749895
})();