But how do you have the variants also be "variadic"?
I'm not sure I find the indexed (...)::0 solution particularly understandable, no.
I suggested an alternative route more akin to enums and specifically similar to how pattern matching works:
type Foo = Bar | Bar(u8, f32) | Quux { field: String };
(This is intended to make you think of or-patterns / disjunctions => enums)