6

在 OCaml 中,您可以嵌套签名:

module type FOO =
sig
  module type BAR
  (* … *)
end

我只是想知道是否有人有任何使用的例子,因为我想不出任何需要它的地方。我想它可能在函子的返回签名中很有用,但我想不出任何具体的东西。

4

2 回答 2

5

我记得看到一些模块(可能在电池中),其中包括一个Infix可以单独打开的模块,并且只有在真正需要时才可以打开。例如,

module Rational = 
  struct
    let add a b = ...
    let sub a b = ...

    module Infix =
      struct
        let (<+>) = add
        let (<->) = sub
      end
  end

这样,如果您要打开Rational.Infix模块,您将不会取消范围(?)任何与Rational.

我正在做一个项目,我们使用模块来划分types. 让一个模块只定义一种类型并操作该类型有助于组织;特别是当模块很小并且有一个单独的文件没有好处时,并且变体类型没有意义。

module Node = 
  struct 

  end
module Edge = 
  struct

  end

type 'a tree = { nodes : 'a Node.t; edges : 'a Edge.t; }

我们也将它们用作单独的文件(与 -mlpack 结合),用于生物数据所需的所有解析器——Nexus、Fasta、Phylip 等。

最后,通常在对新算法进行原型设计时,我们会先用 ocaml 编写它,然后再编写 C 版本。我们通常将 ocaml 版本保存在具有相同函数名称的内部模块中。

module Align = 
  struct
    module OCaml = 
      struct

      end
  end
于 2010-12-07T03:56:11.353 回答
4

我想到的第一个例子:http: //caml.inria.fr/pub/docs/manual-ocaml/libref/type_Map.html

(确实是函子签名)

于 2010-12-07T03:05:26.683 回答