I think the error is correct. StringParser[T]'s ToListParser method has a return type of StringParser[T]. This means if we want to instantiate StringParser[int], then we'll also have to instantiate StringParser[int] too; which then means we'll also have to instantiate StringParser[int], etc etc.
Could you explain how this follows from the previous part?
Go allows method calls to happen dynamically through interface assertions or reflection. As a result, if a type is instantiated, all of its methods must be instantiated too, even if not statically called.
There are certainly cases where we could determine this isn't actually needed, but that would complicate the language specification.