Scala DSL - zagnieżdżony odnośnik do bloku

Grając z DSL w Scali, więc powiedzmy, że mam coś takiego:

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

Teraz chcę, aby każdy zagnieżdżony blok miał odniesienie lub funkcje odniesienia w otaczającym bloku. Np. Efekt jest taki, że podłoga jest dodawana do domu, sypialni do podłogi itp.

Obecnie robię to w okropny sposób, mając globalny stos, który jest aktualizowany na każdym poziomie zagnieżdżonym, aby śledzić bieżący „kontekst”. Również moja obecna wersja nie jest bezpieczna, ponieważ mogę dodać sypialnię do domu.

Kolejna poprzednia wersja była

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

Gdzie każdy blok zwrócił listę widżetów (+ używał niejawnego, aby zamienić ogólną „rzecz” w „listę rzeczy”, aby można było dodać następną „rzecz”. Zwrócona lista widgetów została następnie dodana po zwróceniu bloku. Ale nie lubię przymusowego używania +, ponieważ na wielu stronach jest brzydki.

W każdym razie, aby połączyć te dwa?

questionAnswers(2)

yourAnswerToTheQuestion