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