Ok guys, I'd like to thank you for your answers.
In my still very limited knowledge of Haskell, I thought tuples were
redundant while having available other constructs, namely data
types. But there are so many corners that I'm not really sure about
nothing.
It was also referred that tuples are everywhere, namely on prelude
and general standard library. I wasn't clear in this point, but I
was not questioning if tuples should be used now, but why were they
introduced in the language in first place.
I've been reading the paper "A History of Haskell: Being Lazy With
Class", Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler,
which I find a very interesting paper overall.
From it, it looks that tuples were put first and only later came the
data types. Then they have this section "5.4 Tuples and irrefutable
patterns" where they make some considerations about language design
decisions they had to make regarding the consistency of tuples:
«For a start, should single constructor data types, such
as
data Pair a b = Pair a b
share the same properties as tuples, with a semantic discontinuity
induced by adding a second constructor? We were also concerned
about the efficiency of this lazy form of pattern matching, and
the
space leaks that might result. Lastly, the unlifted form of tuples
is
essentially incompatible with seq—another controversial feature
of the language, discussed in Section 10.3—because parallel
evaluation
would be required to implement seq on unlifted tuples.
In the end, we decided to make both tuples and algebraic data
types
have a lifted semantics, so that pattern matching always induces
evaluation.»
Wouldn't Haskell be "cleaner" if it had left tuples out, replacing
them with some standard types added (Pair, Triple, ...) and similar
fst, snd functions? Then curry and uncurry wouldn't even be needed
if I have this right.