Hi fellow Gophers
I am trying to define an interface that satisfies addition (ultimate goal is to define a
field).
However, I could get the following code to compile:
no matter what approach I use (types Field0, Field1, Field2).
The compiler error is of the pattern:
```
./prog.go:29:22: *big.Rat does not satisfy Field0[any] (wrong type for method Add)
have Add(*big.Rat, *big.Rat) *big.Rat
want Add(any, any) any
```
I took the first approach from this recent
post on generics.
If anyone could point to a correct way to make these kinds of self-referencing definitions would be much appreciated.
Thanks
```
package main
import (
"fmt"
"math/big"
)
type Field0[T any] interface {
Add(T, T) T
}
type Field1[T any] interface {
Add(Field1[T], Field1[T]) Field1[T]
}
type Field2 interface {
Add(Field2, Field2) Field2
}
type PolynomialTerm[K Field0[any]] struct {
Coefficient K
Monomial []byte
}
func main() {
c := big.NewRat(0, 1)
// This line doesn't compile no matter what Field we choose in PolynomialTerm's definition.
t := PolynomialTerm[*big.Rat]{Coefficient: c}
fmt.Println(t)
}
```