Существует ли язык или система типов, которая поддерживает определение типов, которые могут быть созданы только через определенную функцию.Номинальные типы, связанные с определенной функцией
Примером может быть тип NonZeroInteger
, который связан с функцией CreateNonZeroInteger
. Любой внешний код может получить доступ к типу, получить и вернуть значения этого типа. Но принципиально, значение этого типа может быть создано только путем вызова функции CreateNonZeroInteger
NonZeroInteger
должно быть номинально типизировано. Значение другого типа с той же структурой не должно быть сопоставимым или непригодным для этого типа.
Я думаю, что это обычно делается с помощью модуля, который скрывает конструктор данных и предоставляет функцию, которая обертывает конструктор данных. См. Главный ответ здесь: http://stackoverflow.com/questions/39531032/using-types-to-force-correctness – zoran119
В f # вы можете использовать модификаторы доступа, но это было бы уродливо –
"* Есть ли язык или тип системы который поддерживает определение типов, которые могут быть созданы только через определенную функцию. * «Ну, C++ для одного; но я не знаю ни одной системы типа «Hindley-Milner-based_ type», которая полностью поддерживает ее, что похоже на то, что вы на самом деле спрашиваете. – ildjarn