[GHC] #8782: Using GADT's to maintain invariant in GHC libraries