@cdome Thank you. I am writing function like map, it will take the type array, slice, seq, iterator, etc as parameter, because the iterator cannot be treated as typed, so I cannot use typed(If the paramter type is typed, the function in the code can compile successfully).
The code like this works: type outType = type(( block: when compiles(seq1.len) and not (seq1 is string): when seq1 is array[1, Slice]: (var it{.inject.}: type(seq1[0].a);) else: (var it{.inject.}: type(seq1[0]);) elif seq1 is Slice: (var it{.inject.}: type(seq1.a);) else: (var it{.inject.}: type(seq1);) op)) var result: seq[outType] = @[] I have several function like this, so I hope I can use an template to wrapper the code rather than copy/paste, but if I put the code in another template, I get the compiler error.