How to define an interface that refers to itself?

24 views
Skip to first unread message

awaw...@gmail.com

unread,
4:02 AM (9 hours ago) 4:02 AM
to golang-nuts
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)
}
```

Axel Wagner

unread,
4:59 AM (8 hours ago) 4:59 AM
to awaw...@gmail.com, golang-nuts

--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/905e4f95-737f-48cb-bf9b-66e94e31e521n%40googlegroups.com.

awaw...@gmail.com

unread,
5:47 AM (8 hours ago) 5:47 AM
to golang-nuts
Thank you Axel for this educative solution, much appreciated.
Reply all
Reply to author
Forward
0 new messages