2
我对OCaml中的(显然)函数的签名可以用两种(看似)完全不同的方式定义的事实感到有点困惑。例如。在.mli文件我可以这样写:OCaml中的函子签名
module type A = sig
type a
end
module type SigA = sig
type t
end
module Make (MA : SigA) :
A with type a := MA.t
module type Make2 = functor (MA : SigA) -> A with type a := MA.t
据我了解,在上面的例子中Make
和Make2
是完全一致的签名,但语法看起来相当截然不同。 我错过了什么吗?有什么区别吗?
那么是否有两个单独的句法结构的原因?历史原因?国际海事组织这是一个不好的做法,有两个单独的句法结构服务于相同的目的。
哦好吧,我明白了,这么多参数的支持不是“原生”的方式(很像多方论证功能) –
是的,情况非常类似于功能:例如,可以部分应用模块。 – gsg