2010-12-07 19 views
5

, iç içe geçiremezsiniz imzaları: herkes kullanımda bunların hiçbirini örnekler olsaydı o ihtiyaç olacağını herhangi yerlerin düşünemiyorum çünküOCaml'de iç içe imzalar örneği mi? OCaml yılında

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

Sadece merak ettim. Muhtemelen, functor'ların dönüş imzalarında faydalı olabileceğini hayal ediyorum, ancak belirli şeyleri düşünemiyorum.

cevap

5

ben (belki bataryalarında) birkaç modülleri gördüğümü hatırlamıyorum, ayrı ayrı ve sadece gerçekten istediğinde. Eğer Rational.Infix modülü açmak için olsaydı Böylece örneğin,

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

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

için, de-kapsamını olmaz (?) Rational bir şey aynı isimdeki herhangi işlevleri.

types işaretini ayırmak için modülleri kullandığımız bir proje üzerinde çalışıyorum. Bir modüle sahip olmak sadece bir tür tanımlar ve bu türleri işlemek organizasyonda yardımcı olur; Özellikle modüller küçükse ve ayrı bir dosyaya sahip olduğunda avantajlı olmaz ve varyant türleri anlam ifade etmez.

module Node = 
    struct 

    end 
module Edge = 
    struct 

    end 

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

Biz de bunları kullanmak, her ne kadar biyolojik veri --Nexus, Fasta, PHYLIP, vesaire için gereken tüm ayrıştırıcıları (-mlpack ile kombine) olarak ayrı dosyalar. Son olarak, genellikle yeni bir algoritmanın prototipini hazırlarken, önce ocaml olarak yazacağız, daha sonra bir C versiyonu üzerinde çalışacağız. Ocaml versiyonunu genellikle aynı fonksiyon isimlerine sahip bir iç modülde tutarız.

module Align = 
    struct 
    module OCaml = 
     struct 

     end 
    end 
+0

İç içe geçmiş modüller mükemmel bir anlam ifade eder. Ancak soru, iç içe geçmiş modül * imzaları hakkında soru soruyor *. –

+0

Michael, Soruya yalvarıyor gibi görünüyorsun. Yuvalanmış modüllerin kesin faydaları, yuvalanmış modül imzalarının gerekliliğini ortaya çıkarır. – nlucaroni