Intenta comprender mejor la interfaz / módulo de OCaml
Entiendo en OCaml hay conceptos deinterfaces
ymodule
.
Y entiendo cómo usarlos ahora.
Sin embargo, lo que no entiendo es cómo utilizarlos completamente.
Por ejemplo, en Java, digamos que tenemos una interfazMap
y tambien tenemosHashtable
yHashMap
ese implementoMap
.
En código, puedo hacer como:
Map m = new Hashtable();
m.put("key", value);
Algún día, si cambio de opinión, puedo cambiar aHashmap
muy rápidamente cambiandoMap m = new Hashtable();
aMap m = new HashMap();
, ¿derecho?
Pero, ¿cómo puedo hacer eso fácilmente en Ocaml?
Por ejemplo, tengoMapSig
y 'HashMap: MapSigand "Hashtable:MapSig
en OCaml.
¿Cómo puedo cambiar la implementación fácilmente?
No creo que pueda porque en OCaml tengo que hacer como:
let m = Hashtable.create ();;
Hashtable.put m key value;;
si quiero usarHashMap
en cambio, tengo que reemplazar cadaHashtable
conHashMap
en el código, ¿verdad?
No solo estoy buscando una manera de hacer un alias a los módulos. También considero la validez de las implementaciones, es decir, si la implementación sigue la interfaz deseada.
Por ejemplo, en el ejemplo de Java anterior, solo siHashMap
ha implementadoMap
interfaz, puedo reemplazarHashtable
conHashMap
. De lo contrario, el compilador de Java se quejará.
pero si lo hagomodule M = Hashtable
en OCaml, y siHashMap
no sigueMapSig
y sustituyoHashtable
conHashMap
, ¿lo que sucederá? Creo que el compilador no se quejará, ¿verdad?