Tente entender melhor a interface / módulo do OCaml
Eu entendo no OCaml existem conceitos deinterfaces
emodule
.
E eu entendo como usá-los agora.
No entanto, o que não entendo é como utilizá-los totalmente.
Por exemplo, em Java, digamos que temos uma interfaceMap
e nós também temosHashtable
eHashMap
que implementarMap
.
No código, posso fazer como:
Map m = new Hashtable();
m.put("key", value);
Algum dia, se eu mudar de idéia, posso mudar paraHashmap
muito rapidamente mudandoMap m = new Hashtable();
paraMap m = new HashMap();
, certo?
Mas como posso fazer isso facilmente no Ocaml?
Por exemplo, eu tenhoMapSig
e 'HashMap: MapSigand "Hashtable:MapSig
no OCaml.
Como posso alterar a implementação facilmente?
Eu não acho que posso porque no OCaml eu tenho que fazer como:
let m = Hashtable.create ();;
Hashtable.put m key value;;
se eu quiser usarHashMap
em vez disso, eu tenho que substituir cadaHashtable
comHashMap
no código, certo?
Eu não estou apenas procurando uma maneira de criar um alias para os módulos. Eu também considero a validade das implementações, ou seja, se a implementação segue a interface desejada.
Por exemplo, acima do exemplo Java, somente seHashMap
implementouMap
interface, eu posso substituirHashtable
comHashMap
. caso contrário, o compilador Java irá reclamar.
mas se eu fizermodule M = Hashtable
no OCaml, e seHashMap
não segueMapSig
e eu substituoHashtable
comHashMap
, o que vai acontecer? Eu acho que o compilador não vai reclamar, certo?