Fun with Algebraic Data Types and Implicits