Type operations, allowing working generically with mutable types,
but still having efficient code.
For example, by reducing object allocation via reuse.
Use enum singleton pattern, having single enum value - INSTANCE.
Serialization code depends on implementations being enums.