export const compose = (...fns) => value =>
fns.reduceRight((previousValue, fn) =>
fn(previousValue), value);
Eu escrevi da maneira mais reduzida o meu entendimento da execução do código acima, peço que por gentileza, me confirmem se estou certo, caso contrario peço a correção de você.
Segue:
As funções estão sendo executadas da direita para esquerda, por isso foi utilizado o reduceRight, e o resultado da execução de cada função vai ser passado para a seguinte (a sua esquerda), assim sucessivamente. value representa as notas, os dois parametros enviados para o reduce são, o primeiro representa o seu valor anterior, e o segundo é a função que está iterando ou seja, sendo executada no momento, a partir disso, eu vou pegar a função que está sendo executada (iterada), e passar o value como previousValue. Em nosso contexto, na primeira iteração de reduceRight, fn será a função getItemsFromNotas. Seu resultado será o previousValue passado para a função anterior e assim sucessivamente. Isso tudo ira retornar uma função que recebe um parâmetro apenas, no caso o sumItems.