A type that may be an a, a b, or both an a and a b at once.
Destroy the structure of a These a b.
The first two functions are applied to the This a and That b values, respectively.
The third function is applied to the These a b value.
There is only one implementation of this function. It is fully described by the type signature.
Replace any as with cs and replace any bs with ds.
Similar to these.
The difference is that in the These a b case
we apply the second and third functions and merge the results with the first function.
This type is very closely related to Result a b.
While Result a b models exclusive-or, this type models inclusive-or.