¿Cómo hacer que los constructores seguros de Kotlin trabajen en Scala?

Kotlin tiene increíbles types de constructores seguros que hacen posible crear dsl como este

html { head { title("The title") body {} // compile error } body {} // fine } 

La maravilla es que no puedes poner tags en lugares no válidos, como el cuerpo dentro de la cabeza, la autocompletación también funciona correctamente.

Me interesa si esto se puede lograr en Scala. ¿Cómo conseguirlo?

    Si está interesado en build html, entonces hay una biblioteca scalatags que utiliza un concepto similar. Lograr este tipo de constructores no necesita ningún lenguaje específico. Aquí hay un ejemplo:

     object HtmlBuilder extends App { import html._ val result = html { div { div{ a(href = "http://stackoverflow.com") } } } } sealed trait Node case class Element(name: String, attrs: Map[String, String], body: Node) extends Node case class Text(content: String) extends Node case object Empty extends Node object html { implicit val node: Node = Empty def apply(body: Node) = body def a(href: String)(implicit body: Node) = Element("a", Map("href" -> href), body) def div(body: Node) = Element("div", Map.empty, body) } object Node { implicit def strToText(str: String): Text = Text(str) }