pass unapplied type parameters instead of empty arrays as local_type
check explicit types on enum abstract fields
always apply local GADT transformation even without with_type
unify enum abstract field type with expected type to support GADTish behavior