Simple algebraic data types for C
Pizza into Java : Translating theory into practice