Yo recuerdo haber visto un par de módulos (tal vez en las baterías), que incluye un módulo de Infix
el interior que se podría abrir por separado y solo cuando realmente se desee. Por ejemplo,
module Rational =
struct
let add a b = ...
let sub a b = ...
module Infix =
struct
let (<+>) = add
let (<->) = sub
end
end
De esta manera, si tuviera que abrir el módulo Rational.Infix
, no tendría el alcance de-(?) Las funciones con los mismos nombres que nada en Rational
.
Estoy trabajando en un proyecto donde utilizamos módulos para demarcar types
. Tener un módulo que defina solo un tipo y manipular ese tipo ayuda en la organización; especialmente cuando los módulos son pequeños y tener un archivo separado no sería ventajoso, y los tipos de variantes no tienen sentido.
module Node =
struct
end
module Edge =
struct
end
type 'a tree = { nodes : 'a Node.t; edges : 'a Edge.t; }
También utilizamos ellos, aunque como archivos separados (combinado con -mlpack), para todos los programas de análisis que necesitamos para --Nexus datos biológicos, FASTA, Phylip, etcétera.
Por último, a menudo cuando hacemos prototipos de un nuevo algoritmo lo escribiremos primero en ocaml, luego trabajaremos en una versión C. Por lo general, conservamos la versión de ocaml en un módulo interno con los mismos nombres de funciones.
module Align =
struct
module OCaml =
struct
end
end
Los módulos anidados tienen mucho sentido. La pregunta, sin embargo, es preguntar sobre el módulo anidado * firmas *. –
Michael, pareces estar mendigando la pregunta. Los beneficios concluyentes de los módulos anidados genera la necesidad de firmas de módulos anidados. – nlucaroni