title: Parameterizing the length of a tuple in a haskell data type
body: <p>I would like to do this:</p>
  
  <pre><code>data Foo n = Foo $(tuple n Integer)
  </code></pre>
  
  <p>and thus allow</p>
  
  <pre><code>x :: Foo 3
  x = Foo (1, 2, 3)
  
  y :: Foo 5
  y = Foo (5, 4, 3, 2, 1)
  </code></pre>
  
  <p>Currently I have simply</p>
  
  <pre><code>data Foo = Foo [Integer]
  </code></pre>
  
  <p>which can be made to work, but throws away a lot of nice compile-time checking. I'll be making a few different Foo data objects, and each will have a fixed number of <code>foo</code>s throughout its lifespan, and it feels silly to not be able to check that in the type system.</p>
  
  <p>Is this possible in haskell?</p>