Variant records/tagged unions
Each component of a datatype declaration can have information
- constructors act as functions to create values with that tag
- can be used in patterns to take apart values of a tag
datatype Sexpr = Nil | Integer of int | Symbol of string | Cons of Sexpr * Sexpr;