Раздел 44 · Логика и типы

Линейные типы в Haskell: сейф закрывают ровно один раз

senior~35 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Ефим Карпович · счетовод Монетного двора

Ваш Rust молодец: монету, которую уже отдали, второй раз отдать не даёт. А сейф, который забыли закрыть, он закрывает сам, молча, когда переменная выходит из области видимости. Для монеты это удобно. Для сейфа нет: сейф, закрытый без подписи, в моей книге значит «монеты ночевали без счёта». Мне нужен язык, где сейф закрывают ровно один раз. Не ноль и не два.

В журнале Кассы за прошлый месяц Счетовод нашёл две странные строки. В одной сейф № 4 закрыт дважды, и под одной выемкой стоят две подписи. В другой сейф № 9 открыт вечером и не закрыт вовсе. Программу сейфов Касса получила от Арбитра, а Арбитр, как ты помнишь, написан на Haskell.

В уроке 66 ты видел, что Rust устроен как аффинная логика: переменную нельзя использовать дважды, но можно не использовать вовсе. Сегодня шаг дальше, к логике из урока 65 целиком: «ровно один раз». В Haskell для этого есть расширение LinearTypes, и к концу урока компилятор сам найдёт обе строки из журнала Счетовода.

урок из курса

Урок из курса «Логика и типы». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.