Попробуйте для дальнейшего понимания интерфейса / модуля 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
, что случится? Я думаю, что компилятор не будет жаловаться, верно?