discard """ output: '''16 32 48 64 128 192 ''' """ iterator gaz(it: iterator{.inline.}): type(it) = for x in it: yield x*2 iterator baz(it: iterator{.inline.}) = for x in gaz(it): yield x*2 type T1 = auto iterator bar(it: iterator: T1{.inline.}): T1 = for x in baz(it): yield x*2 iterator foo[T](x: iterator: T{.inline.}): T = for e in bar(x): yield e*2 var s = @[1, 2, 3] # pass an interator several levels deep: for x in s.items.foo: echo x # use some complex iterator as an input for another one: for x in s.items.baz.foo: echo x