curried
trait Function[X1, X2..., Xn, Y] {
def curried: (X1) => (X2) => ... => (Xn) => Y
}
curried
cria uma função anônima equivalente para processar o primeiro parâmetro dessa função.
Por sua vez, essa função anônima retorna outra função anônima para processar o segundo parâmetro dessa função … até que todos os parâmetros tenham sido processados e o resultado final calculado.