OCaml中嵌套签名的示例?

时间:2010-12-07 01:51:09

标签: module ocaml ml

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

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

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

2 个答案:

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

答案 1 :(得分:4)

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

(它确实是一个仿函数签名)