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.

Reply via email to