Я услышал, что "модули первого класса" прибывают в OCaml 3.12. Какие преимущества они предложат? Какие дети вещей будут легче? Какую проблему они пытаются решить? Простой пример был бы достаточен.
Это только одно из возможных приложений, но модули первого класса упрощают кодирование экзистенциальных типов, при этом в основном модуль упаковывает экзистенциальный тип и значение, использующее этот тип). Например, см. Работу Алена Фриша по динамическим типам (код взят из работы Алена Фриша по динтипам: http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/branches/dyntypes/stdlib/dyntypes .ml? view = markup )
module type DYN = sig
type t
val x: t
val t: t ttype
end
type dyn = (module DYN)
let dyn (type s) t x =
let module M = struct
type t = s
let x = x
let t = t
end
in
(module M : DYN)
Идея здесь в том, что "ttype" - это конкретное представление этого типа, алгебраический тип данных с конструкторами Int, Float и т. д., и здесь у вас есть значение, тип которого скрыто, но содержит конкретное представление этого типа, которое вы можете использовать, например, для более безопасной сериализации / десериализации.