This simple iterator example I expect to return '99 99 99', but it returns '99
99 0' no matter I do. I am using dev version of nim.
proc filter[T](it: (iterator : T), f: proc(x: T): bool): (iterator : T) =
iterator filtered: T {.closure.} =
for x in it():
if f(x): # commenting out this line has no effect on the output
yield x
result = filtered
proc len[T](it : iterator : T) : Natural =
for i in it():
result += 1
proc simpleSeqIterator(s :seq[int]) : iterator : int =
iterator it: int {.closure.} =
for x in s:
yield x
result = it
let a = newSeq[int](99)
let iter = simpleSeqIterator(a)
echo len(a)
echo len(iter)
echo len(filter(iter, proc(x : int) : bool = true))
Am I doing something wrong? or is it a nim bug? Feels like capturing issues in
the filter proc.