module type Arity =
sig
val arity : nat (* in my real code it has another type *)
end
module S =
functor (A : Arity) -> struct
let check = ...
end
シグネチャを実装せずcheck
にファンクター内の関数を使用したいと思います。私はファーストクラスのモジュールを読みましたが、それを書く方法をまだ理解していません(実際には)。これが私のドラフトコードです:S
Arity
let A = has type of (module Arity)
それから
let M = S (A)
次に、check
関数を呼び出すことができます
M.check
私は試した:
let f arity = (module (val arity : Arity) : Arity)
それは戻ります:val f : (module Arity) -> (module Arity)
このファーストクラスのモジュールを書くのを手伝ってくれませんか。書けOcaml
ますか?
また、(http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual021.html#toc81)セクション7.14には次のように書かれています。
「モジュール式(val expr : package-type)
はファンクターの本体では使用できません...」
わかりません。例を挙げて理解するのを手伝っていただけませんか。
ご協力ありがとうございました。