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.