Интерфейс OCaml vs . signature?

Я немного запутался в отношении интерфейсов и подписей в 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? Единственное различие в строках, которые я вижу, это то, что он называет модуль.

Я неправильно понимаю это, или здесь что-то еще происходит?

12
задан sorrysorrysorrysorry 29 August 2011 в 02:22
поделиться