class My inline fun T.perform(job: (T)-> R) : R { return job(this) } inline fun My.someWork(job: (String) -> Any): Unit { this.perform { job("OK") } } inline fun My.doWork (closure : (param : String) -> Unit) : Unit { this.someWork(closure) } inline fun My.doPerform (closure : (param : My) -> Int) : Int { return perform(closure) }