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?

Editar:

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?