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.

Reply via email to