pattern matching + enums