// TODO: Investigate ES modules issue

// FILE: Outer.kt

package another
open class Outer {
    protected class Stage(val run: () -> Unit)
    protected class My(var stage: Stage? = null) {
        fun initStage(f: () -> Unit): Stage {
            stage = Stage(f)
            return stage!!
        }
    }
    protected fun my(init: My.() -> Unit): My {
        val result = My()
        result.init()
        return result
    }
}

// FILE: Main.kt

package other
class Derived : another.Outer() {
    init {
        my {
            initStage { }
        }
    }
}

fun box(): String {
    Derived()
    return "OK"
}
