fun interface KRunnable {
  abstract fun run()

}

fun foo0() {
}

fun foo1(vararg xs: Int): Int {
  return 1
}

fun use(r: KRunnable) {
}

fun testSamConstructor(): KRunnable {
  return ::foo0 /*-> KRunnable */
}

fun testSamCosntructorOnAdapted(): KRunnable {
  return { // BLOCK
    local fun foo1() {
      foo1() /*~> Unit */
    }

    ::foo1
  } /*-> KRunnable */
}

fun testSamConversion() {
  use(r = ::foo0 /*-> KRunnable */)
}

fun testSamConversionOnAdapted() {
  use(r = { // BLOCK
    local fun foo1() {
      foo1() /*~> Unit */
    }

    ::foo1 /*-> KRunnable */
  })
}
