There is no type overload but this may work (though void is a bit tricky):
type
Action*[T] = when T is void: proc() {.nimcall.}
else: proc(arg: T){.nimcall.}
Run
But the idiomatic way to solve that would be with push/pop
{.push nimcall.} # Add nimcall pragma to all proc
proc foo() = discard
proc bar[T](arg: T) = discard
{.pop.} # Stop adding the nimcall pragma
proc baz[T](arg: T) = discard
Run
