Se você olhar IntFunction, pode ficar mais claro: IntFunction<R>é a FunctionalInterface. Ele representa uma função que recebe um inte retorna um valor do tipoR .
Nesse caso, o tipo de retorno Rtambém é a FunctionalInterface, ou seja, um IntUnaryOperator. Então o primeiro função (externa) retorna uma função.
Neste caso: Quando aplicado a um int, curriedAdddeve retornar uma função que novamente recebe um int(e retorna novamente int, porque é isso que IntUnaryOperatorfaz).
Na programação funcional, é comum escrever o tipo de uma função como param -> return_valuee você vê exatamente isso aqui. Portanto, o tipo de curriedAddé int -> int -> int(ou int -> (int -> int)se preferir, melhor).
A sintaxe lambda do Java 8 vai junto com isso. Para definir tal função, você escreve
a -> b -> a + b
que é muito semelhante ao cálculo lambda real:
λa λb a + b
λb a + bé uma função que recebe um único parâmetro be retorna um valor (a soma). λa λb a + bé uma função que aceita um único parâmetro ae retorna outra função de um único parâmetro. λa λb a + bretorna λb a + bcom adefinido para o valor do parâmetro.