-1
  1. Are n-tuples defined recursively in terms of 2-tuples, for example, are (a,b,c) and (a,(b,c)) the same?

  2. If not, what's the rationale behind it?

closed as primarily opinion-based by user22815, durron597, JB King, Ixrec, gnat Nov 9 '15 at 10:25

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.

5

(a, (b, c)) is a 2-tuple whose second element happens to be another 2-tuple. If your suggestion had been adopted, it would not be possible to represent a tuple inside the final cell of another tuple. Which would be a bizarrely asymmetric restriction and make tuples much less generally useful.

  • I am now confused. As lists are defined recursively in haskell, then it will not be possible to represent a list inside the final cell of another list?! I know that a:[b,c] and [a,b,c] are the same, but how about [a,[b,c]]? – Michael Tsang Mar 1 '15 at 13:24
  • Lists are defined recursively but not the way you think. Firstly, you cannot have [a,[b,c]]. In Haskell lists, each element has to bee of the same type. You can have a list of lists - [[a,b],[c,d,e],[]] - but not a list mixing non-lists and lists. When you create List a, every element in the list has to be of type a. – itsbruce Mar 1 '15 at 14:04
  • Haskell lists are an Algebraic Data Type. The definition is data List a = Nil | Cons a (List a). The recursion is in the definition, which defines List in terms of itself. Nil and Cons a are both constructors for List a. Nil gives an empty list while Cons a (List a) prepends an element of type a onto an existing List a. So [1,2,3] is actually Cons 1 (Cons 2 (Cons 3 Nil)). – itsbruce Mar 1 '15 at 14:14
2

1, No it's defined separately for each tuple. (So data (,) a b = (,) a b for the 2-tuple). You can see the full list(and limit that you can use) here: https://downloads.haskell.org/~ghc/7.4.1/docs/html/libraries/ghc-prim-0.2.0.0/GHC-Tuple.html (also the comment about the number of n-tuples in the source is funny)

2, I would say performance but not sure about this.(Edit: see @itsbruce's answer for a better reason)

  • 1
    would you mind explaining more on what this resource does and why do you recommend it as answering the question asked? "Link-only answers" are not quite welcome at Stack Exchange – gnat Jan 26 '15 at 15:09
  • 1
    I've added a an example from the link but I don't think that copying stuff over here helps in this case. – erdeszt Jan 26 '15 at 17:39

Not the answer you're looking for? Browse other questions tagged or ask your own question.