Я слышал, что "модули первого класса" входят в OCaml 3.12. Какие преимущества они могут предложить? Каким детям будет легче? Какую проблему они пытаются решить? Простой пример будет достаточным.
Модули первого класса в OCaml 3.12: Какие вещи они упростят (или возможно)?
Ответ 1
Это только одно возможное приложение, но модули первого класса облегчают кодирование экзистенциальных типов, в основном модуль, который упаковывает экзистенциальный тип и значение, используя этот тип). Например, см. Работу Алена Фриша по динамическим типам (код, взятый из работы Алена Фриша по типу динамиков: 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 и т.д., и у вас есть значение, тип которого скрыт, но он несет конкретное представление этот тип, который вы можете использовать, например, для более безопасной сериализации/десериализации.
Ответ 2
Может быть, немного поздно, но новая статья Первоклассные модули: скрытая власть и дразнящая promises - именно по теме. Это набор рецептов/жемчужин вокруг первоклассных модулей, Олег Киселев (oleg) и Джереми Яллоп (автор, например, Deriving).