Generics and Static types

Nim types can be parametrized by types (generics) or compile-time values (static)

For example

type
  MySeq[T] = object
    len, reserved: int
    data: ptr UncheckedArray[T]

The generics can be restricted

type
  MySeq[T: int32 or int64] = object
    len, reserved: int
    data: ptr UncheckedArray[T]

With static types

type
  SmallSeq[MaxLen: static int, T] = object
    len: int
    data: array[MaxLen, T]