Describir: Patterns in Datatype−Generic Programming