2010-12-07 8 views
5

、あなたは巣署名することができます誰もが使用中のこののいずれかの例を持っていた場合、私はそれが必要とされるであろう任意の場所を考えることができないので、OCamlのネストシグネチャの例は? OCamlでは

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

私は、思っていました。私はそれがおそらくファンクターのリターンシグネチャーでは便利だと思いますが、私は特定の事柄について考えることはできません。

答えて

5

私は(多分電池に)いくつかのモジュールを見て思い出し、本当に欲しいときにのみ、例えば、このように

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

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

あなたがRational.Infixモジュールを開くとしたら、あなたは、DE-スコープではないでしょう(?)は任意の関数Rationalで何と同じ名前を持ちます。

私はモジュールを使用してtypesを画定するプロジェクトに取り組んでいます。モジュールが1つのタイプのみを定義し、そのタイプを操作すると組織化に役立ちます。特にモジュールが小さく、別のファイルを持つことは有利ではなく、バリアント型は意味をなさない。

module Node = 
    struct 

    end 
module Edge = 
    struct 

    end 

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

また、エトセトラ、我々は、生物学的データ--Nexusのために必要なすべてのパーサーのための(-mlpackと組み合わせ)として別々のファイル、FASTA、PHYLIP、けれども、それらを使用しています。

最後に、新しいアルゴリズムのプロトタイプを作成するときは、最初にocamlで記述し、次にCバージョンで作業します。 ocamlのバージョンは、通常、同じ関数名を持つ内部モジュールに保持されます。

module Align = 
    struct 
    module OCaml = 
     struct 

     end 
    end 
+0

ネストされたモジュールは理にかなっています。しかし、質問はネストされたモジュール*シグネチャ*について質問しています。 –

+0

マイケル、あなたは質問をしているようです。ネストされたモジュールの決定的な利点は、ネストされたモジュールシグネチャの必要性を生み出すことです。 – nlucaroni