Apologies in advance that I can not provide anything like a solution to the problem, but how do you expect something like
data ExistentialNumber where
Number :: Integral a => a -> ExistentialNumber
would be deserialized? Isn’t deserialization of non-monomorphic types (that hide inside GADTs) an ill-posed problem? Perhaps this thread contains useful methods to bring a GADT into a better serializable form.