Hello Go users!

I am playing with the generics that were added in go 1.18 and noticed an 
odd discrepancy that I have not been able to find an authoritative answer 
to. Consider the following data type, as well as the function defined for 
it:

type Node[T any] struct {
    Inner T
    Next  *Node[any]
}

func (n *Node[any]) ListPreTraverse(f func(*Node[any])) {
    tmpN := interface{}(n)
    if tmpN, ok := tmpN.(*Node[*Node[any]]); ok {
        tmpN.Inner.ListPreTraverse(f)
    } else {
        f(n)
    }
    n.Next.ListPreTraverse(f)
}

This function is a simple attempt to iterate across a generic linked list 
and call a function on each node in the list (although in this case it may 
behave more like a tree if inner stores another node). When I went to 
compile this code I encountered the following error:

test.go:64:25: cannot use f (variable of type func(*Node[any])) as type 
func(*Node[any]) in argument to n.Next.ListPreTraverse

To me at least it seems that all the information to validate that the 
argument fits the type specified in the function call is there, defined in 
the function header. What am I missing?

Thanks,
Ava

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/951bc5d6-6194-4cfa-905d-66f7f0059a65n%40googlegroups.com.

Reply via email to