이제 실제 구현을 추가한다. 이 구현은 원래 함수 구현의 본문과 같다.
fun <A,B,C,D> curried() = { a: A -> { b: B -> { c: C -> { d: D -> "$a, $b, $c, $d" } } } }
튜플을 받는 함수라면 어떤 함수든 이 원칙을 적용해 커리한 함수로 변환할 수 있다.
연습문제 3-10
(A, B)에서 C로 가는 함수를 커리한 함수로 바꾸는 함수를 작성하라.
이 문제에서도 타입을 따라가면 된다. curry 함수는 (A, B) -> C 타입의 함수를 인자로 받아서 (A) -> (B) -> C 타입의 함수 값을 반환한다. 따라서 시그니처는 다음과 같다.
fun <A, B, C> curry(f: (A, B) -> C): (A) -> (B) -> C