In section 7.1.2 it is mentioned that we can generalize the pattern of creating existential constraint kinds by implementing Has and creating type aliases for HasShow and Dynamic in terms of it.
However no further mention is given to how the code from the prior example should be updated since removing the data constructors breaks liftD2 and the prior elimHasShow and elimDynamic functions. It would be cool to show how to update the prior code so that it compiles again or, if appropriate skills have been learned, to make it an exercise to fix it.