Union Types, Discriminated Unions, and Type Guards