title: Typing Variadic Tuple in Python3
body: <p>So I'm trying to type hint a Tuple of Tuples where I have something like this:</p>
  
  <pre><code>from typing import List, Tuple
  def foo(arg: Tuple[Tuple[int]]):
      for tpl in arg:
          for thing_id in tpl:
              # do stuff
  </code></pre>
  
  <p>Where there can be more than one tuple in the tuple of tuples and there can be more than one integer in the tuples but there should only ever be a tuple of tuples of integers. In other words, I want both of these to work:</p>
  
  <pre><code>foo(((1,),))
  
  foo(((1,2,3),(4,5))) # doesn't pass the checker which expects length == 1
  </code></pre>
  
  <p>but this to fail</p>
  
  <pre><code>foo(((1,"x"),))
  </code></pre>
  
  <p>Now I can use lists:</p>
  
  <pre><code>def bar(arg: List[List[int]]):
      print(arg)
  </code></pre>
  
  <p>and everything works as expected. But I want to default the argument and would prefer not to have a mutable default argument. Nor is there any reason to use a mutable structure here. Any way to do this?</p>