Почему, учитывая:Синтаксис сахара OCaml функторов
module type ENTRY = sig type t end
module type LOG = functor (E : ENTRY) -> sig type t end
Это правильное выполнение LOG
module Log :LOG = functor (LogEntry : ENTRY) ->
struct type t = LogEntry.t list end
Но это не
module Log (LogEntry: ENTRY) :LOG = struct
type t = LogEntry.t list end
Error: Signature mismatch:
Modules do not match: sig type t = LogEntry.t list end is not included in LOG
Если удалить метка sig (: LOG) из обоих определений Log, то они возвращают тот же тип, что и только синтаксический сахар [1]
[1] http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora132.html
с использованием компилятора OCaml версии 4.01.0 – Heidi