Кортежі — це гетерогенні структури даних, фіксованої довжини, та з елементами здебільшого різних типів.
Створюються вони за допомоги бінарного оператора (,).
> (,) 'c' True
('c',True)
При цьому в нас виходить двох елементний кортеж, часто його ще називають парою. Але кортежі можуть бути й довші, або коротші.
Найкоротший кортеж - це порожній кортеж.
> ()
()
Якщо нам потрібно більше елементів, то значить треба додати більше ком. Але кортежу довжиною в один елемент не існує, оскільки синтаксично його не можливо створити через те що елемент в дужках, наприклад (3), це просто групування.
> (,,) 4 'a' False
(4,'a',False)
> (,,,) 4 'a' False "Haskell"
(4,'a',False,"Haskell")
Але створювати таким синтаксисом не дуже зручно, оскільки нам постійно потрібно рахувати кількість аргументів, й вказувати відповідну кількість ком, на одну менше за значень. Для спрощення, синтаксис хаскеля трохи підцукрили, й дозволили робити нам так як вони відображаються.
> (4, 'a', False, "Haskell")
(4,'a',False,"Haskell")
Тепер перейдемо до їхніх типів.
Нагадую: простори імен типів та всього іншого відокремлені.
Тип кортежів це ().
> :t ()
() :: ()
Якщо це не порожній кортеж, то й тип не порожній.
> :t ('c', True)
('c', True) :: (Char, Bool)
Це все добре, але треба якось же із ними працювати й отримувати окремі елементи. У стандартній бібліотеці для цього є кілька готових функцій, наприклад візьмемо fst котра повертає перший елемент, та snd котра повертає другий елемент.
> p = (1,2)
> fst p
1
> snd p
2
Ці функції працюють тільки з парами, і реалізовуються через зіставлення.
fst (x,_) = x
snd (_,y) = y




