generalized algebraic data types