type BitVecKind = enum kArr, kVla, kSeq Units = SomeUnsignedInt BitVec3[arType: static BitVecKind, B: Units, S:static int] = object when arType is kArr: Base: array[S div (sizeof(B)  8) + int(S mod (sizeof(B)  8) != 0), B] when arType is kSeq: Base: seq[B] when arType is kVla: Base: VarLengthArray[B] size: int```