implement enums