The type `cachedVn[string, V]` *would* in fact instantiate `cachedVn` with `string` and `V`.
But that's not what you are doing. You are writing the receiver type as `fun c(c *cachedFn[string, V])`, which means that "the receiver is the generic type `cachedVn` with two type parameters called `string` and `V`".
Predeclared identifiers in Go are not special in any way, you can re-use them for your own variables and types - or type parameters. So what you are doing here is fundamentally similar to this problem:
https://go.dev/play/p/lDE-o7fGHi8
There probably should be a vet check for using a predeclared identifier as a type parameter name (or maybe even for any re-use of a predeclared identifier).