package d import java.util.ArrayList fun box(): String { ListTag().test(listOf("a", "b")) return "OK" } fun ListTag.test(list: List) { for (item in list) { item() { a { text = item } } } } open class HtmlTag open class ListTag : HtmlTag() {} class LI : ListTag() {} public fun ListTag.item(body: LI.() -> Unit): Unit {} fun HtmlTag.a(contents: A.() -> Unit) {} trait A : HtmlTag { public var text: String } fun listOf(vararg strings: String): List { val list = ArrayList() for (s in strings) { list.add(s) } return list }