IsTyConstraint for more flexibility (requires ConstraintKinds)