Язык программирования Haskell имеет концепцию newtypes
: если я пишу newtype Foo = Foo (Bar)
, то создается новый тип Foo
, который изоморфен Bar
, то есть есть взаимно однозначные преобразования между ними. Свойства этой конструкции:
- Два типа полностью разделены (т.е. компилятор не позволит вам использовать тот, где ожидается другой, без использования явных преобразований).
- Они имеют одинаковое представление. В частности, функции преобразования имеют нулевую временную стоимость и возвращают "тот же объект" в кучу.
- Конверсия возможна только между этими типами и не может быть использована неправильно, т.е. сохраняется безопасность типа.
Какие другие языки программирования предоставляют эту функцию?
Один пример, похоже, является однозначной структурой в C, когда используется только с элементами доступа к записи/конструкторами. Недействительные кандидаты были бы однозначными -структурами в C, когда они использовались с кастами, поскольку приведение не проверяется компилятором или объектами с одним членом на Java, поскольку они не будут иметь одинаковое представление.
Похожие вопросы: Есть ли у F # новый тип Haskell? (Нет) и Есть ли у D новый тип? (не более).