I think this is a very interesting idea and addresses many current pain points with enums, especially the problem where the variants don’t have a first-class type.
In regard to that, one thing I would find helpful is the ability to derive traits for “sum-enums” so long as that trait is implemented by all of the variants, e.g.:
struct Foobar { ... }
impl MyTrait for Foobar { ... }
struct Baz { ... }
impl MyTrait for Baz { ... }
#[derive(MyTrait)]
enum Quux(Foobar, Baz)