Function Currying

What concept is being demonstrated in this code?
const pipe = (...fns) => (x) => fns.reduce((y, f) => f(y), x);

const add2 = x => x + 2;
const multiply3 = x => x * 3;
const toString = x => x.toString();

const process = pipe(add2, multiply3, toString);
const result = process(5);
console.log(result);
Next Question (16/20)