Tag
By treating types as positive spaces for constructing new values rather than negative spaces for restricting values, and combining product types and sum types, we can precisely model data invariants and avoid fighting with the type checker. It recommends using simple type composition rather than complex type system features.