This module provides interfaces similar to `Applicative`
and `Traversable` for heterogeneous container types.
We distinguish between two types of containers: Product
types hold all their values at once, while sum types
represent a choice: A generalization of `Either`.