addTax 함수는 Double의 쌍 하나를 인자로 받는다. (자바와 달리 코틀린에서는 세 개 이상의 인자를 받는 함수도 만들 수 있다. 자바에서는 인자가 하나인 경우 Function 인터페이스를, 두 개인 경우 BiFunction 인터페이스를 쓸 수 있다. 하지만 세 개 이상의 인자가 필요하면 직접 인터페이스를 정의해야 한다.)
그런데 커리한 버전을 사용해 같은 결과를 얻을 수 있다. 커리한 함수는 인자가 하나뿐이며 인자가 하나뿐인 다른 함수를 반환하는 함수다. 이때 반환하는 함수도 마찬가지로 인자가 하나뿐인 다른 함수를 반환하는 함수일 수 있다. 이런 과정이 결과 값을 반환할 때까지 반복된다. 다음은 addTax를 함수 값으로 사용하는 커리한 버전을 보여준다.
val taxRate = 0.09 val addTax = { taxRate: Double -> { price: Double -> price + price * taxRate } } println(addTax(taxRate)(12.0))
fun 함수를 커리한 버전은 의미가 거의 없다. addTax에서 첫 번째 함수는 fun을 사용해 정의할 수 있지만, 반환하는 함수는 반드시 함수 값을 사용해야 한다. fun 함수는 값이 아니기 때문에 반환할 수가 없다.