trait Node[T <: Node[T]] {
  self: T =>
  
  def child: Seq[T]
  def foreach(f: T => Unit)
}

case class MyNode(val label: String) extends Node[MyNode] {
  ...
}