You will remember from Chapter 4, Functions in Kotlin, that the receiver of a function is the instance that corresponds to the this keyword when inside the function body. In Kotlin, function parameters can be defined to accept a receiver when they are invoked. We do that using the following syntax:
fun foo(fn: String.() -> Boolean): Unit
Then, when we invoke the fn function in the foo function body, we are required to invoke it on an instance of a string, as you can see if we complete the implementation of foo:
    fun foo(fn: String.() -> Boolean): Unit { 
      "string".fn() 
    } 
This feature also works with anonymous functions:
    val substring = fun String.(substr: String): Boolean =
    this.contains(substr) 
    "hello".substring("ello") 
You might prefer the anonymous function syntax if you wish to...