Automatically deriving Generic for every algebraic data type