2010-12-07 11 views
5

In OCaml, können Sie nisten Unterschriften:Beispiel für verschachtelte Signaturen in OCaml?

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

Ich habe mich nur gefragt, ob jemand irgendwelche Beispiele dafür in Gebrauch hatte, da ich nicht von irgendwelchen Plätzen denken kann, wo es gebraucht wird. Ich stelle mir vor, dass es wahrscheinlich in den Rücksignaturen von Funktoren nützlich ist, aber ich kann mir keine spezifischen Dinge vorstellen.

Antwort

5

Ich erinnere mich an ein paar Module (vielleicht in Batterien) zu sehen, die eine Infix Modul enthalten im Inneren, die geöffnet werden konnte getrennt und nur wenn wirklich gewünscht. Zum Beispiel

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

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

Auf diese Weise, wenn Sie das Rational.Infix Modul öffnen, würden Sie nicht de-Umfang (?), Um alle Funktionen mit den gleichen Namen wie alles, was in Rational.

Ich arbeite an einem Projekt, bei dem wir Module verwenden, um types abzugrenzen. Wenn ein Modul nur einen Typ definiert und diesen Typ manipuliert, hilft das bei der Organisation. vor allem, wenn die Module klein sind und eine separate Datei haben, wäre nicht vorteilhaft, und Variantentypen sind nicht sinnvoll.

module Node = 
    struct 

    end 
module Edge = 
    struct 

    end 

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

Wir sie auch benutzen, obwohl sie als separate Dateien (mit -mlpack kombiniert), für alle Parser uns für biologische Daten --Nexus benötigen, Fasta, Phylip, et cetera.

Zuletzt, oft wenn wir einen neuen Algorithmus prototypieren, schreiben wir ihn zuerst in ocaml, dann arbeiten wir an einer C Version. Normalerweise behalten wir die ocaml-Version in einem inneren Modul mit den gleichen Funktionsnamen.

module Align = 
    struct 
    module OCaml = 
     struct 

     end 
    end 
+0

Verschachtelte Module sind absolut sinnvoll. Die Frage ist jedoch, nach verschachtelten Modul * Signaturen * zu fragen. –

+0

Michael, Du scheinst die Frage zu stellen. Die schlüssigen Vorteile verschachtelter Module erzeugen die Notwendigkeit verschachtelter Modul-Signaturen. – nlucaroni