да, понял. а как потом работать с этим List<?>
Тип обычный это:
string
int
Guid
Дженерик тип (высший тип 1 порядка)
T -> string
T -> int
...
то есть у тебя есть некий тайп конструктор, она же функция. Ты должен подать конкретный (1) тип чтобы получить этот тип
тип высшего порядка (2 и более):
T -> G -> string
T -> G -> int
...
это когда ты подаёшь тип (например первый T), а возвращается привычный дженерик, когда можно ещё подать тип!
то есть это как с функциями высших порядков (функции умеют возвращать функции),
А типы высшего порядка это когда типы умеют возвращать другие типы или их конструкторы