Переменная типа: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м викификация
Строка 49:
 
В языке [[Хаскел]] различают несколько режимов (доступных в виде расширений языка): режим <tt>Rank2Types</tt> разрешает лишь некоторые формы экзистенциальных типов, открывающие полиморфизм ''не выше'' 2-го ранга, для которого [[выведение типов]] ещё разрешимо; режим <tt>RankNTypes</tt> разрешает перемещать [[Квантор всеобщности|универсальный квантор]] (<code>forall a</code>) внутрь [[функциональный тип|функциональных типов]], входящих в состав более сложных сигнатур{{sfn|haskell_rankNtypes}}, режим <tt>ImpredicativeTypes</tt> разрешает произвольные экзистенциальные типы{{sfn|haskell_impredicative_types}}.
 
[[OCaml]] реализует поддержку экзистенциальной квантификации посредством решения, названного «''локально-абстрактными типами''» ({{lang-en2|locally abstract types}})<ref>[http://caml.inria.fr/pub/docs/manual-ocaml/extn.html#sec228 OCaml extenstions. 7.13 Locally abstract types]</ref>.
 
В спецификации {{nobr|[[Standard ML]]}} для некоторых встроенных операций определена особая квантификация. Её синтаксис не регламентирован и различается в реализациях языка (чаще всего просто скрывается). Например, сигнатура встроенной операции сложения может упрощённо выглядеть примерно следующим образом: