package main var called bool type I interface { Foo() } type A struct{} func (a A) Foo() { called = true } func lambda[X I]() func() func() { return func() func() { var x X return x.Foo } } func main() { lambda[A]()()() if !called { panic(called) } }