Обязательные издержки опциональных типов

Pavel Vetokhin
1 min readDec 9, 2018

--

Рич в очередной раз набросил на существующие системы типов. На сей раз он поднял тему опциональности. Как всегда подкупает его озабоченность издержками поддержки софта и неизменная фокусировка на их минимизации.

Опциональные типы (Optional, Maybe, etc…) отбраковываются аргументом про их обратную несовместимость при, казалось бы, безобидном ослаблении требований на входе или усилении гарантий на выходе.

Произведения (Classes, Records, etc…) объявляются местоориентированными (place-oriented) типами. После такого любой уважающий себя разработчик сто раз подумает, прежде чем начать их использовать.

Вместо столь милого сердцу произведения Рич (как обычно) предлагает использовать отображение (map). По его словам отображения более просты и фундаментальны, чем произведения. Для них, например, не требуется привлекать понятия места и функции.

Далее Рич вводит понятия схемы (schema) и выборки (select). Схема описывает потенциальную форму данных. Схема есть некий шаблон, которому данные могут соответствовать частично или полностью. В рамках самой схемы уровень соответствия никак не регламентируется. Выборка, в свою очередь, позволяет задать степень соответствия данных схеме в рамках того или иного контекста. У разных операций для одной и той же схемы обязательными или опциональными могут быть абсолютно разные “поля”.

Существует ли хоть один язык программирования, система типов которого позволяла бы накладывать ограничения на типы в зависимости от контекста их использования?

--

--