On output side, I'm also confused. I usually only use untyped when the macro/template returns an arbitrary AST, and concrete types if it returns a typed expression.
The semantics of a typed return values has also been discussed here: https://forum.nim-lang.org/t/4037