I'll give the 'why' rather than the 'what'.
In most mainstream languages you take a List<Int> and substitute for List<X> without changing the implementation of List.
But there's another substitution you could have made, which is L<Int>. HKT allows you to parametrise L over Int, in the same way you were able to parametrise List over Int.