class Controller { fun yield(t: T): Boolean = true fun get(): T = TODO() } fun generate(g: suspend Controller.() -> Unit): S = TODO() fun bar(x: Any) {} fun myWith(r: R, b: (R) -> Unit) {} fun main() { generate { // S <: Any bar(get()) // S <: R // Any <: R myWith(get()) { it.length } yield("") }.length }