interface Output[T] {
  val T
  name string
}

struct Coil {
  pub mut: val int
  pub: name string [required]
}
struct Light {
  pub mut: val int
  pub: name string [required]
}

fn main() {
  mut outs := []Output{}
  outs << Coil { name: 'outhole' }
  outs << Light { name: 'shoot again' }
}
