Why is it impossible to subtype a struct?

You can use the concrete subtyping feature in ReusePattern.jl for this purpose, i.e.:

@quasiabstract struct Controller
  field1
  field2
  etc.
end

@quasiabstract struct NewController <: Controller
  field3
  etc.
end

function simulate(c::Controller)
  println(c.field1, c.field2)
end

conctroller = NewController(arg1, arg2, arg3)

# The following will surely work (as long as you use `@quasiabstract` to subtype `Controller`)
simulate(controller)
2 Likes