Generic type based on define