我听说OCaml 3.12中有"头等舱模块".它们有什么优势?什么孩子的事情会更容易?他们试图解决什么问题?一个简单的例子就足够了.
gas*_*che 13
它只是一个可能的应用程序,但是第一类模块可以很容易地编码存在类型,基本上一个模块打包一个存在类型和一个使用这种类型的值).例如,请参阅Alain Frisch关于动态类型的工作(代码取自Alain Frisch关于dyntypes的工作: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)
Run Code Online (Sandbox Code Playgroud)
这里的想法是"ttype"是该类型的具体表示,具有Int,Float构造函数等的代数数据类型,并且您在这里有一个值,其类型是隐藏的,但它带有该类型的具体表示,您可以使用它来获得更安全的序列化/反序列化.
gas*_*che 12
也许有点晚了,但新论文的一流模块:隐藏的力量和诱人的承诺正是话题.这是一套关于一流模块的食谱/珍珠,由Oleg Kiselyov(oleg)和Jeremy Yallop(作者,例如Deriving项目的作者).