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
Verschachtelte Module sind absolut sinnvoll. Die Frage ist jedoch, nach verschachtelten Modul * Signaturen * zu fragen. –
Michael, Du scheinst die Frage zu stellen. Die schlüssigen Vorteile verschachtelter Module erzeugen die Notwendigkeit verschachtelter Modul-Signaturen. – nlucaroni