An exercise to use generics through implementing ADTs.