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"}