We have seen how we can extract a function value from an existing top-level or extension function. The logical next step would be functionality that allows us to combine multiple functions in a concise way—function composition.
Unlike many other languages, Kotlin does not have any built-in support for function composition. However, it is very easy to add our own using the facilities we have seen so far for the manipulation of functions.
We can start by defining a compose function that would accept two input functions, returning a new function that will invoke them in turn when applied. Of course, the output type from the first function must match up with the input type of the second:
fun <A, B, C> compose(fn1: (A) -> B, fn2: (B) -> C): (A) -> C = { a -> val b = fn1(a) val c = fn2(b) c }
This example has been written in a...