https://go.dev/play/p/SAGfHm1bYJh

It seem to work with single type parameter as well:

```
type PolynomialTerm*[K Field0[K]]* struct {
  Coefficient K
  Monomial    []byte
}
```

On Thu, Dec 25, 2025 at 4:47 AM [email protected] <[email protected]>
wrote:

> Thank you Axel for this educative solution, much appreciated.
>
> On Thursday, December 25, 2025 at 5:59:34 PM UTC+8 Axel Wagner wrote:
>
>> https://go.dev/play/p/KV75rDOwIn2
>>
>> On Thu, 25 Dec 2025 at 10:03, [email protected] <[email protected]>
>> wrote:
>>
>>> Hi fellow Gophers
>>>
>>> I am trying to define an interface that satisfies addition (ultimate
>>> goal is to define a field
>>> <https://en.wikipedia.org/wiki/Field_(mathematics)>).
>>> However, I could get the following code to compile:
>>>
>>> https://go.dev/play/p/zIwo1KW_Un0
>>>
>>> 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
>>> <https://go.dev/blog/generic-interfaces> 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)
>>> }
>>> ```
>>>
>>> --
>>> 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 [email protected].
>>> To view this discussion visit
>>> https://groups.google.com/d/msgid/golang-nuts/905e4f95-737f-48cb-bf9b-66e94e31e521n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/golang-nuts/905e4f95-737f-48cb-bf9b-66e94e31e521n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> 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 [email protected].
> To view this discussion visit
> https://groups.google.com/d/msgid/golang-nuts/01cfbbcc-c7d6-48de-886c-21a445e55941n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/01cfbbcc-c7d6-48de-886c-21a445e55941n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/CAAmgd3c%2B9k0ZGwKUGx3sv3sOn%3Di2W5SSDswstZP-M7FibUY%3D%3Dg%40mail.gmail.com.

Reply via email to