const modifiedReduce = (...elements) =>
reduce((initialElement, appliedFunc) =>
appliedFunc(initialElement), elements);

const compressFunction =
(appliedFunction, ...remainFunctions) =>
(...elements) =>
modifiedReduce(appliedFunction(...elements), ...remainFunctions);

const canGetElementsLater =
(alreadyAppliedFunc) =>
(firstElement, ...remainElements) =>
remainElements.length
? alreadyAppliedFunc(firstElement, ...remainElements)
: (...secondElements) => alreadyAppliedFunc(firstElement, ...secondElements);
