summary refs log tree commit diff stats
path: root/lib/pure/collections/sequtils.nim
diff options
context:
space:
mode:
authorcooldome <cdome@bk.ru>2019-04-27 12:41:08 +0100
committerGitHub <noreply@github.com>2019-04-27 12:41:08 +0100
commit3647c03cadfce2ccaec136590a8acd8a736d0bb0 (patch)
tree0ed7fdf1b2fa167c8cd6e4e7db0bfd83cd28ec63 /lib/pure/collections/sequtils.nim
parent69755542f48618939b3b43f63dbd59b92c518c61 (diff)
downloadNim-3647c03cadfce2ccaec136590a8acd8a736d0bb0.tar.gz
reimplement_pr_10974 (#11130)
Diffstat (limited to 'lib/pure/collections/sequtils.nim')
-rw-r--r--lib/pure/collections/sequtils.nim16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim
index 253340379..e39c1fb80 100644
--- a/lib/pure/collections/sequtils.nim
+++ b/lib/pure/collections/sequtils.nim
@@ -949,6 +949,14 @@ macro mapLiterals*(constructor, op: untyped;
   ## works for nested tuples of arrays of sets etc.
   result = mapLitsImpl(constructor, op, nested.boolVal)
 
+iterator items*[T](xs: iterator: T): T =
+  ## iterates over each element yielded by a closure iterator. This may
+  ## not seem particularly useful on its own, but this allows closure
+  ## iterators to be used by the the mapIt, filterIt, allIt, anyIt, etc.
+  ## templates.
+  for x in xs():
+    yield x
+
 when isMainModule:
   import strutils
   from algorithm import sorted
@@ -1382,5 +1390,13 @@ when isMainModule:
     doAssert outp == @[@["a", "b"], @["c", "d"]]
 
 
+  block:
+    proc iter(len: int): auto =
+      result = iterator(): int =
+        for i in 0..<len:
+          yield i
+
+    doAssert: iter(3).mapIt(2*it).foldl(a + b) == 6
+
   when not defined(testing):
     echo "Finished doc tests"