I came across this too:
You can think of the declaration as being like this:
func (h *holder[alpha any]) processAlpha()
(although this is not valid syntax today). The name "alpha" gets bound to some type parameter in local scope, so it is unrelated to the "alpha" which exists outside. You can even shadow names like "string" and "int" in Go, if you want to write really confusing code.
I'm not sure if what you were trying to do is something like this:
type T = *holder[alpha]
func (h T) processAlpha() {
item := alpha(0.1)
_ = item.validate()
}
If so, that's not allowed:
./prog.go:28:9: cannot define new methods on instantiated type holder[alpha]