# typetraits

- Manual
- Standard library
- Index

Search:
Group by:

This module defines compile-time reflection procs for working with types.

Unstable API.

# Procs

    proc name(t: typedesc): string {...}{.magic: "TypeTrait".}

  Returns the name of the given type.

  Alias for system.`$`(t) since Nim v0.20.

  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.

  See also:

  - stripGenericParams

  Example:

      type
        Functor[A] = concept f
          type MatchedGenericType = genericHead(f.type)
            # `f` will be a value of a type such as `Option[T]`
            # `MatchedGenericType` will become the `Option` type

  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

    proc isNamedTuple(T: typedesc): bool

  Return true for named tuples, false for any other type. Source Edit

# Exports

$, $, $, $, $, $, $, $, $, $, $, $, $, $, $, $, $, $