Union Types and Type Guards to Language Specification