This is a type where we specify the shape of each of the elements. Wikipedia has a thorough discussion. "Algebraic" refers to the property that an Algebraic Data Type is created by "algebraic" operations. The "algebra" here is "sums" and "products": "sum" is alternation (A | B, meaning A or B but not both) "product" is combination (A B, meaning A and B together) Examples: data Pair = I Int | D Dou