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

时间:2010-03-20 16:09:53

标签: ocaml

我听说OCaml 3.12中有“头等舱模块”。它们有什么优势?什么孩子的事情会更容易?他们试图解决什么问题?一个简单的例子就足够了。

2 个答案:

答案 0 :(得分: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)

这里的想法是“ttype”是该类型的具体表示,具有Int,Float构造函数等的代数数据类型,并且您在这里有一个值,其类型是隐藏的,但它带有一个具体的表示形式该类型,您可以使用它来获得更安全的序列化/反序列化。

答案 1 :(得分:12)

也许有点迟了,但新论文First-class modules: hidden power and tantalizing promises正是关于主题的。这是一套关于一流模块的食谱/珍珠,由Oleg Kiselyov(oleg)和Jeremy Yallop(例如,Deriving项目的作者)。