hidden boilerplate in constraint generation, integrated nice error messages, no more unions