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

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

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

(Добавлено в OCaml 4.02)

module-expr ::= ...
∣ functor () -> module-expr
∣ module-expr ()
definition ::= ...
∣ module module-name { ( module-name : module-type ) ∣ () } [ : module-type ] = module-expr
module-type ::= ...
∣ [functor] () -> module-type
specification ::= ...
∣ module module-name { ( module-name : module-type ) ∣ () } : module-type

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

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

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

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/generativefunctors.html

Spec-Zone.ru

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