Because callers of
iterate just destructure or use indexes, all kinds of hard to understand bugs can result from incorrectly implemented
iterate methods. Eg
struct Foo N::Int end function Base.iterate(foo::Foo, i = 1) i ≥ foo.N && return nothing i == 1 && return (i = 1, j = 0) # USER FORGOT , i + 1 (i = i, j = i - 1), i + 1 end Base.length(foo::Foo) = foo.N collect(Foo(4))
I wonder if these could just be caught earlier, with an error that is easier to understand, if some assertions were thrown in.
Could not find an open issue, so asking here first. I would of course be happy to do a PR.