2010-12-07 18 views
5

En OCaml, puede anidar firmas:Ejemplo de firmas anidadas en OCaml?

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

Me preguntaba si alguien tenía algún ejemplo de esto en su uso, ya que no puedo pensar en cualquier lugar donde se necesitarían. Me imagino que probablemente sea útil en las firmas de retorno de los funtores, pero no puedo pensar en ninguna cosa específica.

Respuesta

5

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 
+0

Los módulos anidados tienen mucho sentido. La pregunta, sin embargo, es preguntar sobre el módulo anidado * firmas *. –

+0

Michael, pareces estar mendigando la pregunta. Los beneficios concluyentes de los módulos anidados genera la necesidad de firmas de módulos anidados. – nlucaroni