Щомісяця наш партнер зустрічається зі своїм найкращим другом. У них обох дуже щільний графік, тож знайти слушну дату непросто! А оскільки графік щільний і в нас, партнер завжди уточнює можливі дати зустрічі з нами:
Під час дзвінка цього місяця партнер запитує нас:
Спантеличені, ми питаємо, що таке надцятий день. Партнер пояснює, що надцятий день - це вигадане поняття, яке означає дні місяця, що закінчуються на «-надцяте»:
Оскільки днів тижня теж сім, кожен день тижня гарантовано має рівно один надцятий день щомісяця.
Тепер, коли ми розуміємо, що таке надцятий день, ми перевіряємо свій календар. На надцятий четвер у нас нічого не заплановано, тож ми радо підтверджуємо дату партнерові.
Знайдіть точну дату зустрічі, знаючи місяць, рік, день тижня та тиждень.
Є шість значень тижня: first, second, third, fourth, last, teenth.
Наприклад, може знадобитися знайти дату зустрічі на перший понеділок січня 2018 року (1 січня 2018 року).
Так само може знадобитися знайти:
Тиждень teenth означає сім днів у місяці, які закінчуються на «-teenth» (13th, 14th, 15th, 16th, 17th, 18th і 19th).
Якщо треба знайти teenth-суботу серпня 1953 року, подивімося на його календар:
August 1953
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Звідси бачимо, що teenth-субота припадає на 15 серпня 1953 року.
Ця вправа визначає Subtype під назвою Month для натуральних чисел від 1 до 12.
Subtype можна уявити як пару ⟨x, h⟩, де x - значення, а h - доведення його правильності.
Значення всередині Subtype (у цьому випадку x) можна отримати за допомогою .val, наприклад x.val.
Його доведення можна отримати за допомогою .property, наприклад x.property.
До обох також можна дістатися за допомогою зіставлення зі зразками, як завжди.