Induction principles for polymorphic datatypes