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
There is only one implementation of this function. It is fully described by the type signature.
Replace any bs with cs
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.
A version of mergeWith that does not modify the This a or That a values.
Similar to List.Extra.zip except the resulting list is the length of the longer list.
We can also think of this from a relational algebra perspective (or SQL if that's your thing). We view each list as a relation (table) where the primary key is its index in the list. Then List.Extra.zip can be viewed as a natural join (inner join), and align can be viewed as a full outer join.
This type is very closely related to Result a b.
While Result a b models exclusive-or, this type models inclusive-or.