2010-03-20 8 views

risposta

13

È solo una delle possibili applicazioni, ma i moduli di prima classe semplificano la codifica di tipi esistenziali, in pratica un modulo che include un tipo esistenziale e un valore che utilizza questo tipo). Ad esempio, vedere Alain Frisch funziona su tipi dinamici (codice preso da Alain Frisch lavorare su dyntypes: http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/branches/dyntypes/stdlib/dyntypes.ml?view=markup)

module type DYN = sig 
    type t 
    val x: t 
    val t: t ttype 
end 

type dyn = (module DYN) 

let dyn (type s) t x = 
    let module M = struct 
    type t = s 
    let x = x 
    let t = t 
    end 
    in 
    (module M : DYN) 

L'idea qui è che "ttype" è una rappresentazione concreta di quel tipo, un tipo di dati algebrica con Int , Costruttori Float e così via, e tu hai qui un valore, il cui tipo è nascosto, ma che porta una rappresentazione concreta di quel tipo, che puoi usare ad esempio per ottenere una serializzazione/deserializzazione più sicura.

+0

Bello. Un'ulteriore applicazione dello stesso concetto che vedo: combinando un tipo esistenziale con la capacità di "legare" un oggetto a un altro e di farlo controllare dal sistema tipo. Per esempio. crea un cursore per una connessione al database e quindi digita: verifica che non possa essere utilizzato con una connessione diversa. Dolce! –

Problemi correlati