Попробуйте для дальнейшего понимания интерфейса / модуля OCaml

Я так понимаю в OCaml есть понятияinterfaces а такжеmodule.

И теперь я понимаю, как их использовать.

Однако я не понимаю, как их полностью использовать.

Например, в Java, скажем, у нас есть интерфейсMap и у нас также естьHashtable а такжеHashMap что реализоватьMap.

В коде я могу сделать как:

Map m = new Hashtable();
m.put("key", value);

Когда-нибудь, если я передумаю, я могу измениться наHashmap очень быстро меняясьMap m = new Hashtable(); вMap m = new HashMap();, правильно?

Но как я могу легко сделать это в Ocaml?

Например, у меня естьMapSig и 'HashMap: MapSigand "Hashtable:MapSig в OCaml.

Как я могу легко изменить реализацию?

Я не думаю, что смогу, потому что в OCaml я должен сделать так:

let m = Hashtable.create ();;

Hashtable.put m key value;;

если я хочу использоватьHashMap вместо этого я должен заменить каждыйHashtable с участиемHashMap в коде, верно?

Редактировать:

Я не только ищу способ сделать псевдоним для модулей. Я также рассматриваю обоснованность реализаций, т. Е. Соответствует ли реализация требуемому интерфейсу.

Например, в приведенном выше примере Java, только еслиHashMap реализовалMap интерфейс, я могу заменитьHashtable с участиемHashMap, в противном случае компилятор Java будет жаловаться.

но если я сделаюmodule M = Hashtable в OCaml, и еслиHashMap не следуетMapSig и я заменяюHashtable с участиемHashMap, что случится? Я думаю, что компилятор не будет жаловаться, верно?

Ответы на вопрос(2)

Ваш ответ на вопрос