Pure functional data structures using algebraic types. Whoa! Algebraic!