Spec-Zone.ru › OCaml
☰Язык программирования OCaml
  • Язык программирования OCaml
  • Расширения языка

Глава 12 Расширения языка

15 Генеративные функторы

(Введены в OCaml 4.02)

выражение-модуля ::= ...
∣ functor () -> выражение-модуля
∣ выражение-модуля ()
определение ::= ...
∣ module имя-модуля { ( имя-модуля : тип-модуля ) ∣ () } [ : тип-модуля ] = выражение-модуля
тип-модуля ::= ...
∣ [functor] () -> тип-модуля
спецификация ::= ...
∣ module имя-модуля { ( имя-модуля : тип-модуля ) ∣ () } : тип-модуля

Генеративный функтор принимает аргумент единицы (). Для его использования необходимо обязательно применить его к этому аргументу единицы, гарантируя, что все компоненты типа в результате действия функтора ведут себя генеративно, т.е. они отличаются от типов, полученных при других применениях того же функтора. Это эквивалентно принятию аргумента с сигнатурой sig end и всегда применению к struct end, но не к какому-либо определенному модулю (в последнем случае повторное применение к одному и тому же модулю вернет идентичные типы).

В качестве побочного эффекта этой генеративности разрешается распаковывать модули первого класса в теле генеративных функторов.

« Расширяемые типы вариантовТолько-для-расширения синтаксис »
Авторское право © 2024 Institut National de Recherche en Informatique et en Automatique

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/generativefunctors.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API