summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2020-06-24 13:31:07 -0700
committerGitHub <noreply@github.com>2020-06-24 22:31:07 +0200
commit3e5743d6f72d9953eb97e54c11149c8b77c1062d (patch)
treef1b836459c9978de2c551b11cc5c84e3d151f3e9 /lib/pure
parent0434aef4cdc1dd018dff702a9edeb19b5073bc05 (diff)
downloadNim-3e5743d6f72d9953eb97e54c11149c8b77c1062d.tar.gz
add typetraits.elementType (#14780)
* add typetraits.elementType

* add a test for 0-sized seq
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/typetraits.nim12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/pure/typetraits.nim b/lib/pure/typetraits.nim
index 317376405..346ac06d4 100644
--- a/lib/pure/typetraits.nim
+++ b/lib/pure/typetraits.nim
@@ -93,6 +93,18 @@ since (1, 1):
   type StaticParam*[value: static type] = object
     ## used to wrap a static value in `genericParams`
 
+since (1, 3, 5):
+  template elementType*(a: untyped): typedesc =
+    ## return element type of `a`, which can be any iterable (over which you
+    ## can iterate)
+    runnableExamples:
+      iterator myiter(n: int): auto =
+        for i in 0..<n: yield i
+      doAssert elementType(@[1,2]) is int
+      doAssert elementType("asdf") is char
+      doAssert elementType(myiter(3)) is int
+    typeof(block: (for ai in a: ai))
+
 import std/macros
 
 macro genericParamsImpl(T: typedesc): untyped =