为什么会出现以下情况:
这是一个有效的LOG实现。
但是这并不是关键。
如果我从Log的两个定义中都删除sig标签(: LOG),那么它们将返回相同类型,因为它们只是语法糖[1]。
[1] http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora132.html
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
如果我从Log的两个定义中都删除sig标签(: LOG),那么它们将返回相同类型,因为它们只是语法糖[1]。
[1] http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora132.html