Best practices for defining inner constructors for parametric types

In Julia the convention (sadly not enforced by the compiler) is that, for any type S (either abstract or concrete) and any args, when calling S(args...), if the call returns it should return a value that isa S. So the concrete type constructor (MyType{T}) is, in a sense, more basic than the abstract type constructor (MyType). So IMO the former option in your question is much preferable than the latter.

Furthermore, the former option may make it easier for the programmer to be easy on the compiler (regarding type inference) when necessary, although this would rarely matter.

2 Likes