OCaml 3.12中的第一类模块:它们使更容易(或可能)的东西变成什么样?

ane*_*eal 17 ocaml

我听说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项目的作者).