Кортежі — це гетерогенні структури даних, фіксованої довжини, та з елементами здебільшого різних типів.

Створюються вони за допомоги бінарного оператора (,).

> (,) '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

#ukrhaskell #haskell #tuple #кортежі #типи #програмування

Гетерогенна система — Вікіпедія