Scala DSL - Bloque anidado que hace referencia al padre

Jugando con un DSL en Scala, así que digamos que tengo algo como esto:

house {
  floor {
    bedroom("kids)
    bedroom("master")
  }
  floor {
    kitchen()
  }
}

Ahora lo que quiero es que en cada bloque anidado tenga una referencia o haga referencia a las funciones en el bloque que lo contiene. Por ejemplo, el efecto es que el piso se agrega a la casa, el dormitorio al piso, etc.

Actualmente hago esto de una manera horrible de tener una pila global que se actualiza en cada nivel anidado para realizar un seguimiento del "contexto" actual. Además, mi versión actual no es segura para los tipos, ya que puedo agregar un dormitorio a una casa.

Otra revisión previa fue

house {
  floor {
    bedroom("kids) +
      bedroom("master")
  } +
    floor {
      kitchen()
    }
}

Donde cada bloque devolvió una Lista de widgets (el + estaba usando un implícito para convertir una "cosa" genérica en una "lista de cosas" para que se pueda agregar la siguiente "cosa"). La lista de widgets devueltos se agregó una vez que se devolvió el bloque. Pero no me gusta el uso forzado de + ya que se pone feo en muchas páginas.

De todos modos para fusionar los dos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta