Comment by eyelidlessness

18 hours ago

It’s very situational. If you can predict the shape of error cases, anything that doesn’t match that shape will do. If you can’t, you can fabricate a nominal type in one way or another (such as the symbol suggestion made by a sibling commenter, or by a class with a private member). The broad strokes solution though is to use a type that:

1. Won’t be assignable to the invalid thing.

2. Conveys some human-meaningful information about what was expected/wrong and what would resolve it.