Parametric types - type definition in struct name or struct argument?

Exactly. And then you can decide whether to define a constructor for Ball(Red) or Ball(Red()).

Yes to both.

Yes, you use this syntax in order to capture the type in a variable, T. But you could also in stead do

Ball(c::Color) = Ball{typeof(c)}()

and then Ball(Red()).