This module defines compile-time reflection procs for working with types
Procs
proc name(t: typedesc): string {...}{.magic: "TypeTrait".}
-
Returns the name of the given type.
Example:
import typetraits proc `$`*(T: typedesc): string = name(T) template test(x): typed = echo "type: ", type(x), ", value: ", x test 42 # --> type: int, value: 42 test "Foo" # --> type: string, value: Foo test(@['A','B']) # --> type: seq[char], value: @[A, B]
Source Edit proc `$`(t: typedesc): string
- An alias for name. Source Edit
proc arity(t: typedesc): int {...}{.magic: "TypeTrait".}
-
Returns the arity of the given type. This is the number of "type" components or the number of generic parameters a given type t has.
Examples:
assert arity(seq[string]) == 1 assert arity(array[3, int]) == 2 assert arity((int, int, float, string)) == 4
Source Edit proc genericHead(t: typedesc): typedesc {...}{.magic: "TypeTrait".}
-
Accepts an instantiated generic type and returns its uninstantiated form.
- For example:
- seq[int].genericHead will be just seq seq[int].genericHead[float] will be seq[float]
A compile-time error will be produced if the supplied type is not generic.
Source Edit proc stripGenericParams(t: typedesc): typedesc {...}{.magic: "TypeTrait".}
- This trait is similar to genericHead, but instead of producing error for non-generic types, it will just return them unmodified. Source Edit
proc supportsCopyMem(t: typedesc): bool {...}{.magic: "TypeTrait".}
- This trait returns true iff the type t is safe to use for copyMem. Other languages name a type like these blob. Source Edit