14

私は次のような状況です:

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が具体化された両方のものを持つモジュールを生成するジェネリックファンクターが欲しいです。それを簡単に手に入れる方法はありますか?

ファンクターの構文は非常に奇妙で、私はまだ慣れていないので、私が求めていることが簡単な方法で解決できるかどうかはわかりません。

前もって感謝します

4

1 に答える 1

20
于 2010-08-21T14:11:48.290 に答える