I think it took me a while to realise how, despite the fairly pedestrian definition of Tuple2, Tuple3, etc… This proposal is not much different than what exists today (barring the type family shortcuts). There are some weird aspects to the current state of affair: if I write a 77-tuple type, then GHC is quite happy:
```
> :k (Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int,Int, Int, Int)
(Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int, Int, Int,Int, Int, Int, Int, Int, Int,Int, Int, Int) :: *
```
But if I do the same with a 77-tuple value, I get an error (a quite delightful one if I may say so)
```
> :t (True, True, True, True, True, True, True, True, True, True, True, True, True, True,True, True, True, True, True, True, True, True, True, True,True, True, True, True, True, True,True, True, True, True, True, True, True, True, True, True,True, True, True, True, True, True,True, True, True, True, True, True, True, True,True, True, True, True, True, True,True, True, True, True, True, True, True, True,True, True, True, True, True, True,True, True, True)
<interactive>:1:1: error:
A 77-tuple is too large for GHC
(max size is 62)
Workaround: use nested tuples or define a data type
```
With -XNoListTuplePuns, we won't be able to write the former (which is admittedly useless as it doesn't have any values), and would get an unbound type constructor `Tuple77` instead. Or a type error of the latter style in the type family style.
I don't think that there is anything wrong with the proposal (though I agree with Vlad and Simon that removing the very clever variadic type family is probably wiser), but I can't help but be worried at the entropy that it introduces. This feature, while cheap, is not free. Is the improvement worth it? I find myself doubting that Haskellers not named Richard or Vlad will start writing `f (Tuple [a, b, c])` in order to avoid writing `f (type (a, b, c))`
I'm happy to be convinced. But I'm not yet.