더북(TheBook)

이제 구현할 차례다. 인자가 두 개인 커리한 함수를 반환하므로 람다 식을 이중으로 정의하는 것부터 시작하면 된다.

fun <A, B, C> curry(f: (A, B) -> C): (A) -> (B) -> C =
    { a ->
        { b ->
        }
    }

이제 결과 타입으로 평가될 수 있는 식을 넣으면 된다. 여기서는 f 함수에 두 인자 ab를 적용하면 된다.

fun <A, B, C> curry(f: (A, B) -> C): (A) -> (B) -> C =
    { a ->
        { b ->
            f(a, b)
        }
    }

이 경우에도 코드가 컴파일되기만 하면 잘못된 코드일 수가 없다. 이는 강력한 타입 시스템의 여러 장점 중 하나다. (항상 강타입(strongly typed) 시스템에서 컴파일이 된다고 올바른 코드인 것은 아니다. 다음 장에서 타입을 사용해 올바른 프로그램이 될 가능성을 높이는 방법을 배운다.)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.