type MySeq*[T] = object
proc foo(a: seq[int]) = echo "foo: seq[int]"
proc foo[T](a: seq[T]) = echo "foo: seq[T]"
proc foo(a: MySeq[int]) = echo "foo: MySeq[int]"
proc foo[T](a: MySeq[T]) = echo "foo: MySeq[T]"
foo(@[1,2,3])
foo(@["WER"])
foo(MySeq[int]())
foo(MySeq[string]())
What is the reason foo() overloading machinery works differently for seq and my MySeq?