I am strongly against deprecating ExistentialQuantification and prefer it over the GADT notation for non-GADT datatypes. I find GADT notation nice when the types of the result change, but I don't think it is great for normal types (which are the large majority of types I use) for these reasons:
- It duplicates the declaration of the types many types, but often it is not obvious that you have the same type
- The disconnect between the type variables in the data declaration and the constructors is confusing, which is why I prefer the GADT from where you declare the kind of the GADT, but that's quite ugly and verbose.