第 12 章 語言擴展

15 生成型函子

(於 OCaml 4.02 引入)

module-expr::= ...
 functor()->module-expr
 module-expr()
 
定義::= ...
 modulemodule-name { (module-name:module-type) ∣ () } [ :module-type ]  =module-expr
 
模組型別::= ...
  [functor] ()->module-type
 
規範::= ...
 modulemodule-name { (module-name:module-type) ∣ () } :module-type
 

生成型函子接受一個單位 () 引數。為了使用它,必須將其應用於此單位引數,確保函子結果中的所有型別元件都以生成方式運作,它們與同一函子的其他應用所獲得的型別不同。這相當於採用簽章 sig end 的引數,並始終應用於 struct end,而不是應用於某些已定義的模組(在後一種情況下,對同一模組應用兩次將傳回相同的型別)。

作為這種生成性的副作用,允許在生成型函子的主體中解包一級模組。