Types may be combined in various ways, including union:, intersection:, and extended via derive and deriveWith: which preserve type constraints on the derivations.