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。モジュールに1つのタイプのみを定義させ、そのタイプを操作することは組織化に役立ちます。特にモジュールが小さく、個別のファイルを持つことは有利ではなく、バリアントタイプは意味がありません。

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 に答える