enum type  implementation