Nếu bạn nhìn vào IntFunctionnó có thể trở nên rõ ràng hơn: IntFunction<R>là a FunctionalInterface. Nó đại diện cho một hàm nhận một intvà trả về một giá trị kiểu R.
Trong trường hợp này, kiểu trả về Rcũng là a FunctionalInterface, cụ thể là an IntUnaryOperator. Vì vậy, bản thân hàm đầu tiên (bên ngoài) trả về một hàm.
Trong trường hợp này: Khi được áp dụng cho an int, curriedAddđược cho là trả về một hàm lại nhận một int(và trả về một lần nữa int, vì đó là những gì IntUnaryOperatorlàm được).
Trong lập trình hàm, người ta thường viết kiểu của hàm là param -> return_valuevà bạn thấy chính xác ở đây. Vì vậy, loại curriedAddlà int -> int -> int(hoặc int -> (int -> int)nếu bạn thích điều đó tốt hơn).
Cú pháp lambda của Java 8 đi cùng với điều này. Để xác định một chức năng như vậy, bạn viết
a -> b -> a + b
rất giống với phép tính lambda thực tế:
λa λb a + b
λb a + blà một hàm nhận một tham số duy nhất bvà trả về một giá trị (tổng). λa λb a + blà một hàm chấp nhận một tham số duy nhất avà trả về một hàm khác của một tham số duy nhất. λa λb a + btrả về λb a + bvới agiá trị tham số được đặt.