This does not compile, because all type variables have to be fixed at the invocation site. Even if you “nail down” type B,
def foo[A](f: A => List[A], i: Int) = f(i)
…you get a type mismatch.
What they meant is that in general type A and Int may not be the same thus the following code does not compile. One might have thought that type A would be inferred to be an Int by the compiler but it is not possible (unless you provide implicit conversion from Int to A of course).
That would be rank-2 polymorphism, but Scala doesn’t have first-class rank higher than 1. Hence the header for that section, “Scala has rank-1 polymorphism”.
For comparison, in Haskell
foo :: (forall a. a -> [a]) -> b -> [b]
foo f b = f b
Scala lets you encode higher rank, though. With 2.12.4, Scalaz 7.2.19, kind-projector 0.9.4: