Simple algebraic data types for C
Functional programming in C++