A higher-order function is a function that either accepts another function as a parameter, returns a function as its return value, or both.
Let's consider the first example:
fun foo(str: String, fn: (String) -> String): Unit { val applied = fn(str) println(applied) }
Here, we have defined a foo function with two parameters. The first is a string, and the second is a function from string to string. When we say from string to string, we mean the function accepts a string input and returns another string as the output. Also, note the syntax used to define the function parameter. The input types are wrapped in parentheses, and the output type is separated by a thin arrow.
To invoke this function, we can pass in a function literal (function literals were introduced in Chapter 4, Functions in Kotlin):
foo("hello",...