title: Is nested pair a good idea in Haskell
body: <p>AFAIK there is no way to do heterogeneous arrays in Haskell or extend data type.
   However it seems it could be achieved easily by using nested pair (like CONS are).</p>
  
  <p>For example</p>
  
  <pre><code>data Point2D a = Point2D a a
  data Point3D a = Point3D a a a
  </code></pre>
  
  <p>Could be written using nested pair like this;</p>
  
  <pre><code>type Point2D = (a, (a, ())
  type Point3D = (a, (a, (a, ()))
  </code></pre>
  
  <p>That way accessors can be common for Point2D and Point3D</p>
  
  <pre><code>x = fst
  y = fst.snd
  z = fst.snd.snd
  </code></pre>
  
  <p>This technique can also be used to <strong>extend</strong> record like this</p>
  
  <pre><code>type Person = (String, ())
  name = fst
  type User = (String, (String, ())
  email = fst.snd
  </code></pre>
  
  <p>etc ...</p>
  
  <p>Is it a good idea and if so , why is there no built-in support for such thing in Haskell ?
  Is it what GADT is about ?</p>