But algebraic data types do not in themselves provide a way to express the notion of a type with variants or sub-types.