fun foo(f: (T) -> String) {} fun test() { foo { (x: Int) -> "$x"} } Resolved call: Candidate descriptor: fun foo(f: (T) -> String): Unit defined in root package Resulting descriptor: fun foo(f: (Int) -> String): Unit defined in root package Explicit receiver kind = NO_EXPLICIT_RECEIVER Dispatch receiver = NO_RECEIVER Extension receiver = NO_RECEIVER Value arguments mapping: SUCCESS f : (Int) -> String = { (x: Int) -> "$x"}