fun sumAndLog(a:Int, b:Int, log: (Int) -> Unit): Int =
(a + b).also(log)
이 함수의 log 파라미터로 아무것도 하지 않는 순수 함수를 전달하면 sumAndLog가 순수 고차 함수인지 확인할 수 있다.
val tot = sumAndLog(5, 6){}
이 경우 sumAndLog는 여전히 참조 투명성을 유지한다.
순수하지 않은 계산의 예로 println 함수를 들 수 있다. 이 함수의 반환 타입은 Unit이지만 부수 효과로 콘솔에 문자열을 출력한다. 이제 sumAndLog에 println을 전달하면 부수 효과가 발생하면서 결과를 표준 출력에 출력한다.
val tot = sumAndLog(5, 6, ::println)
그러나 sumAndLog 자체는 여전히 순수한 함수로 남아 있다. 이 차이점을 이해하는 것이 중요하다.