Я немного смущен интерфейсами и сигнатурами в OCaml.
Из того, что я прочитал, интерфейсы (файлы .mli) определяют, какие значения могут использоваться / вызываться другими программами. Файлы сигнатур выглядят так же, как и они, за исключением того, что они называют их так, что вы можете создавать различные реализации интерфейса.
Например, если я хочу создать модуль, похожий на набор в Java:
У меня было бы что-то вроде этого:
файл set.mli:
type 'a set
val is_empty : 'a set -> bool
val ....
etc.
Файл подписи (setType.ml)
module type Set = sig
type 'a set
val is_empty : 'a set -> bool
val ...
etc.
end
и тогда реализацией будет другой файл .ml, такой как SpecialSet.ml, который включает в себя структуру, которая определяет все значения и их действия.
module SpecialSet : Set
struct
...
Я немного сбит с толку относительно того, что именно делает "подпись", и какой цели она служит. Разве это не похоже на интерфейс? Зачем нужны оба .mli и .ml? Единственное различие в строках, которые я вижу, состоит в том, что он называет модуль.
Я неправильно понимаю это, или здесь что-то еще происходит?