Algebraic data types for C99. Type-safe and implemented using the standard C preprocessor.