When to reach for this pattern
Use it when you have a closed set of allowed values, but those values should also be treated as a proper domain type instead of raw strings. Locale settings are a good example, but the same idea also works for themes, roles, feature modes, or other user-facing preferences.
This is especially useful when values come from untrusted boundaries such as query params, cookies, forms, or persisted config. You want enum-like ergonomics inside the app, but you also want a clear way to reject invalid input at the edges.