added products, coproducts, and the empty type