interface Iter { mut: next() ?T } struct ArrayIter { data []T mut: index int } fn (mut i ArrayIter) next() ?T { if i.data.len == 0 { return none } i.index += 1 return i.data[i.index] } fn iter(arr []T) Iter { return ArrayIter{ data: arr index: 0 } } fn test_generics_fn_return_generic_interface() { mut x := iter([1, 2, 3]) println(x) y := x.next() or { 0 } println(y) assert y == 2 }