I suppose it was just an instinct to subtype, alias, or otherwise relate ComplexMyNumber to the existing Complex like you would have MyNumber subtype Real, but there’s really no good reason for it. Complex is a parametric UnionAll type that contains concrete DataType types with specified parameters. Since ComplexMyNumber cannot have the structure of Complex{MyNumber}, they cannot be the same concrete type, they cannot share methods, and Complex cannot contain ComplexMyNumber. In fact, I would suggest making the Complex{MyNumber} constructor throw a descriptive error if you should always use ComplexMyNumber instead. There’s no AbstractComplex type for complex numbers like the abstract DataType type Real for real numbers, which is why Complex subtypes Number; that does also mean the methods annotated by Complex in complex.jl is specific to that struct, and you’ll need to make analogous methods for ComplexMyNumber.