|  | // compile | 
|  |  | 
|  | // Copyright 2021 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package main | 
|  |  | 
|  | type Src1[T any] func() Src1[T] | 
|  |  | 
|  | func (s *Src1[T]) Next() { | 
|  | *s = (*s)() | 
|  | } | 
|  |  | 
|  | type Src2[T any] []func() Src2[T] | 
|  |  | 
|  | func (s Src2[T]) Next() { | 
|  | _ = s[0]() | 
|  | } | 
|  |  | 
|  | type Src3[T comparable] map[T]func() Src3[T] | 
|  |  | 
|  | func (s Src3[T]) Next() { | 
|  | var a T | 
|  | _ = s[a]() | 
|  | } | 
|  |  | 
|  | type Src4[T any] chan func() T | 
|  |  | 
|  | func (s Src4[T]) Next() { | 
|  | _ = (<-s)() | 
|  | } | 
|  |  | 
|  | type Src5[T any] func() Src5[T] | 
|  |  | 
|  | func (s Src5[T]) Next() { | 
|  | var x interface{} = s | 
|  | _ = (x.(Src5[T]))() | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | var src1 Src1[int] | 
|  | src1.Next() | 
|  |  | 
|  | var src2 Src2[int] | 
|  | src2.Next() | 
|  |  | 
|  | var src3 Src3[string] | 
|  | src3.Next() | 
|  |  | 
|  | var src4 Src4[int] | 
|  | src4.Next() | 
|  |  | 
|  | var src5 Src5[int] | 
|  | src5.Next() | 
|  | } |