私は次のような状況です:
module type M = sig type s = ... end
module Make(P: Something) : (M with type s = P.t) = struct
type s = P.t
...
end
M
これは、実装内のタイプのモジュールの特定の実装を使用するタイプのモジュールを生成するために正常に機能しますSomething
。
ここで、次のように定義された別のモジュールがあるとします。
module type AU = sig
val feed : float -> unitv
val nth : int -> (float -> float)
val reset : unit -> unit
end
さまざまな実装があります
module SUAlg : AU = struct ... end
module MLAlg : AU = struct ... end
module ACEAlg : AU = struct ... end
問題のポイントは、M
モジュールを2つのものでパラメーター化する必要があるということです:Something
モジュールとAU
モジュールのようなものです
module Make(P: Something) : (M with type s = P.t) = struct
type s = P.t
module Alg = MLAlg (* just an example *)
...
end
Something
しかし、与えられた aと与えられた anAU
が具体化された両方のものを持つモジュールを生成するジェネリックファンクターが欲しいです。それを簡単に手に入れる方法はありますか?
ファンクターの構文は非常に奇妙で、私はまだ慣れていないので、私が求めていることが簡単な方法で解決できるかどうかはわかりません。
前もって感謝します