Ho sentito che "i moduli di prima classe" sono in arrivo in OCaml 3.12. Quali vantaggi offriranno? Quali figli delle cose saranno più facili? Che problema stanno cercando di risolvere? Un semplice esempio sarebbe sufficiente.Moduli di prima classe in OCaml 3.12: Che tipo di cose saranno più facili (o possibili)?
risposta
È 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.
Forse un po 'in ritardo, ma il nuovo documento First-class modules: hidden power and tantalizing promises è esattamente sull'argomento. È un insieme di ricette/perle attorno ai moduli di prima classe, di Oleg Kiselyov (oleg) e Jeremy Yallop (autore, ad esempio, del progetto Deriving).
- 1. Quali sono gli usi positivi dei moduli in pacchetto OCaml?
- 2. moduli e le prestazioni OCaml
- 3. più "rete" nei moduli OCaml collegati
- 4. Tipo OCaml dell'operatore più
- 5. Modulo e classe in OCaml
- 6. OCaml: più alto il polimorfismo kinded (astrazione su moduli?)
- 7. numeri interi di tipo in ocaml
- 8. OCaml: imposta i moduli
- 9. moduli ocaml implementazione
- 10. Estensione di un tipo esistente in OCaml
- 11. tipo ocaml all'interno di un tipo
- 12. Impossibile ottenere il tipo di un'interfaccia/classe che utilizza più di un tipo generico?
- 13. Perché c'è un segno più prima di questo tipo?
- 14. OCaml - Che cos'è un tipo non valido?
- 15. Che tipo di operazioni potrebbero essere necessarie prima di main()
- 16. OCaml: circolarità tra tipo variante e di definizione di modulo
- 17. tipo di ritorno prima o dopo __declspec?
- 18. OCaml: dichiarare una funzione prima di definirla
- 19. I moduli Python sono cittadini di prima classe?
- 20. Rappresentazione del tipo di record AST OCaml
- 21. Come unire i tipi di modulo (firme) di OCaml che definiscono lo stesso tipo?
- 22. tipo di ordine superiore costruttori e funtori in OCaml
- 23. ridondanza nella dichiarazione del tipo di OCaml (ml/MLI)
- 24. REST - supporto di più identificatori possibili
- 25. Impedire a "Più" di riorganizzare le cose
- 26. tipo polimorfico all'interno di un modulo (OCaml)
- 27. Più moduli o più segnalazioni in una pagina?
- 28. Cose che non posso fare in ASP.NET MVC
- 29. Il che viene prima - L'interfaccia o della Classe
- 30. Nomi di costruttori abbreviati in Ocaml
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! –