- Entre parênteses, com seus componentes separados por vírgula:
- Também podemos escrever dessa forma um pouco incomum:
- Sintaxe de tupla de tipos segue o mesmo padrão da primeira imagem de sintaxe:
(elemento1, elemento2, elemento3, elementoN)
(,) elemento1 elemento2
(Int, Int, Float, String, Int)
- Sequência finita de n elementos: tem um tamanho/número fixo de elementos que a compõe;
- Estrutura estática: após criá-la, não é possível modificá-la. Boa para dados que devem ser imutáveis;
- Heterogênea: contém um ou mais tipos diferentes;
- Elementos representados na ordem dada, podendo ter o mesmo elemento mais de uma vez;
- Não há limite para os tipos que são associados as tuplas, ex: uma tupla de tupla;
--TUPLAS COM n ELEMENTOS:
--Tupla-2/Pairs:
(87669544, "Nome completo")
--Tupla-3/Triples:
(87669544, "Nome completo", 'M')
--Tupla-5:
(87669544, "Nome completo", 'M', "dd/mm/aaaa", 1.71)
--Exemplos de tuplas:
([Int], String, (Char, Int))
([1, 2, 3], "hello", ('A'), 65))
(Int, (Int, (Int, Int,), Int), Int)
(1, (2, (3, 4), 5), 6)
- Tuplas com apenas um componente não tem sentido;
- Tipos Unit podem ser entendidos como Tuplas-0, pois sua escrita é ();
- Não há funções pré-definidas para tuplas de mais de 2 elementos, mas podemos criar nossas próprias;
- Mas há também libraries e packages de tuplas que podem ser usadas, como as do site hackage.haskell.org:
- *Em certos casos, talvez seja melhor optar por criar um tipo de dado do que usar tuplas.
type Nome = String --Sinônimo para String(Nome)
type Idade = Int --Sinônimo para Int(Idade)
verIdade :: (Nome,Idade) -> Idade --Função que se passa uma tupla
verIdade (a,b) = b --(Nome, Idade), e devolve a idade
- FST: Retorna o primeiro valor de uma tupla-2;
- SND: Retorna o segundo valor de uma tupla-2;
- CURRY: converte uma função que recebe tuplas em uma que recebe 2 argumentos:
- UNCURRY: converte função de argumentos em função de tuplas
- ZIP: transforma duas listas em uma lista de tuplas:
- SWAP: troca os elementos de um par:
- *Pattern Matching: Usa os construtores da tupla. Pode-se usar esse método para tuplas maiores:
fst (1,2) --retorna 1
snd (1,2) --retorna 2
*As duas acima podem ser usadas combinadas juntas ou com outras funções:
snd (fst ((True,4), "Bom) ) --retorna 4
map fst [(1,2), (3,4), (5,6)] --retorna [1,3,5]










Podemos encontrar tuplas em outras linguagens, como em Python, C++, SQL, Rust, etc. Vejamos:
- Sua definição é assim como a em Haskell e as demais. Também podem vir a serem chamadas de containers ou collections, e em alguns casos, a escrita da tupla pode ser da forma convencional, ou a sem parênteses:
- Elementos dentro de uma tupla são acessados usando indexação:
- Um elemento solitário precisa ser definido da seguinte forma para ser diferenciado de um valor comum:
- Uma tupla vazia é representada da seguinte forma:
- Usando com strings:
- SLICING: extrair uma faixa de elementos da tupla usando: tuple[start:end:step] ``` start: inclusivo; end: exclusivo; step/stride: especifica o incremento entre componentes. ```
- CONCATENAÇÃO: concatena duas tuplas
- REPETIÇÃO: repete a tupla n vezes
- LEN: acha o número de elementos em uma tupla.
- ZIP:
- Criar uma tupla
- Tipo de um elemento
- Tamanho de uma tupla std::tuple_size
#SINTAXE:
tupla = (1, 2, 3)
#OU
tupla = 1, 2, 3
#INDEXAÇÃO DE ELEMENTOS:
#Primeiro: tupla[O]
#Segundo: tupla[1]
#...
#Penúltimo: tupla[-2]
#Últimpo: tupla[-1]
*Tentar acessar um índice inexistente na tupla, obviamente, gerará um erro.
apenasUm = (7,)
empty = ()
#()
#Forma correta
"Hello, %s! You're %s years old." % ("Linda, 24)
'Hello, Linda! You're 24 years old'
#Forma incorreta:
"Hello, %s! You're %s years old." % "Linda, 24
Traceback (most recent call last):
...
TypeError: not enough arguments for format string
Ex1:

Ex2:

Ex3:





#include <tuple>
#include <iostream>
using namespace std;
int main()
{
tuple<int, bool, string> t1 {7, false, "Beleza?"};
// CTAD - Class template argument deduction
tuple t2 {8, true, "CTAD"s};
cout << "t1 = (" << get<0>(t1) << ", " << get<1>(t1) << ", " << get<2>(t1) << ")" << endl;
cout << "t2 = (" << get<0>(t2) << ", " << get<1>(t2) << ", " << get<2>(t2) << ")" << endl;
}
/*SAÍDA
t1=(7, 0, Beleza?)
t2 = (8, 1, CTAD)
*/
#include <tuple>
#include <iostream>
using namespace std;
int main()
{
tuple<int, bool, string> t1 {7, false, "Beleza?"};
cout << "Tipo do primeiro elemento de t1: " << typeid(get<0>(t1)).name() << endl;
cout << "Tipo do segundo elemento de t1: " << typeid(tuple_element<1, decltype(t1)>::type).name() << endl;
cout << "Tipo do terceiro elemento de t1: " << typeid(tuple_element<2, decltype(t1)>::type).name() << endl;
}
/*SAÍDA
Tipo do primeiro elemento de t1: i
Tipo do segundo elemento de t1: b
Tipo do terceiro elemento de t1: NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
*/
#include <tuple>
#include <iostream>
using namespace std;
int main()
{
tuple<char, double, string> t1 {'a', 10.5, "Beleza?"};
cout << "Tamanho da tupla t1: " << tuple_size<decltype(t1)>::value << endl;
cout << "Tamanho da tupla t1: " << tuple_size<tuple<char, double, string>>::value << endl;
}
/*SAÍDA
Tamanho da tupla t1: 3
Tamanho da tupla t1: 3
*/
As tables em SQL também são basicamente sets de tuplas, podendo usar colunas de tuplas ou tuplas de valores constantes.
--ex1:
INSERT (id, nome, idade, salario) VALUES (1, "joão", 25, 1000.00);
--ex2:
SELECT * FROM sometable
WHERE (col1, col2, col3) = (1, 2, "abc");
// Declare tuple
let tupleName: (i32, bool) = (0, false);
// Types can be inferred
let tupleName = (0, false);
// Deconstructive assignment
let (value, value2) = tupleName; // value/value2 now hold the tuple's first/second value
--valores das moedas no dia 26/08/2025
converter real = (real, real*5.41, real*6.29)
type Livro = (String, String, Int)
l1::Livro = ("", "", ) --dê um nome para sua variável e adicione os dados da tupla
maior x = x>2
filter maior (map (uncurry (+))) [(,), (,), (,), (,), (,)]) --complete como quiser
https://www.facom.ufu.br/~madriana/PF/Haskell3.pdf
https://www.inf.ufpr.br/andrey/ci062/ProgramacaoHaskell.pdf
https://aterribili.blogspot.com/2014/01/haskell-apresentando-tuplas.html
https://haskell.tailorfontela.com.br/syntax-in-functions
https://wiki.haskell.org/Haskell_em_10_minutos
https://devtut.github.io/haskell/tuples-pairs-triples.html#pattern-match-on-tuples
https://www.quora.com/Is-Python-the-only-programming-language-that-uses-the-concept-of-a-tuple
https://www.quora.com/Which-programming-languages-have-tuples
https://haskell.pesquisa.ufabc.edu.br/haskell/03.haskell.basico.1/
https://www.facom.ufu.br/~madriana/PF/pratica01.pdf
https://realpython.com/python-tuple/#getting-started-with-pythons-tuple-data-type
https://www.dataquest.io/blog/python-tuples/
https://github.com/Malpaux/programming-cheat-sheets/blob/master/rust.md#data-structures
https://cppmoderno.com/o-que-e-tupla-em-cpp/
https://pt.stackoverflow.com/questions/164164/tuplas-em-banco-de-dados